使用Pandas读取制表符分隔的文件-在Windows上适用,但在Mac上不适用


91

我一直在Windows中使用Pandas / Python读取制表符分隔的数据文件,没有任何问题。数据文件的前三行包含注释,然后带有标题。

df = pd.read_csv(myfile,sep='\t',skiprows=(0,1,2),header=(0))

我现在正在尝试使用Mac读取此文件。(我第一次在Mac上使用Python。)出现以下错误。

pandas.parser.CParserError: Error tokenizing data. C error: Expected 1
fields in line 8, saw 39

如果将read_csv的error_bad_lines参数设置为False则会得到以下信息,该信息一直持续到最后一行的末尾。

Skipping line 8: expected 1 fields, saw 39
Skipping line 9: expected 1 fields, saw 125
Skipping line 10: expected 1 fields, saw 125
Skipping line 11: expected 1 fields, saw 125
Skipping line 12: expected 1 fields, saw 125
Skipping line 13: expected 1 fields, saw 125
Skipping line 14: expected 1 fields, saw 125
Skipping line 15: expected 1 fields, saw 125
Skipping line 16: expected 1 fields, saw 125
Skipping line 17: expected 1 fields, saw 125
...

是否需要为encoding参数指定一个值?似乎我不必这样做,因为在Windows上读取文件效果很好。


您是否在两个操作系统上使用的熊猫版本完全相同?您能否提供一些示例数据来说明Mac上的问题?
joris

无关:您了解Python(0)(0,)Python之间的区别吗?注:(0)0(0,)0,-逗号创建一个元组(除空单),而不是括号。
jfs 2015年

你试过了df = pd.read_table(myfile, skiprows=[0,1,2], header=0)吗?
pbreach

大家好。感谢您的建议。我提出了一个临时解决方案,但可能需要重新审视此问题,并在将来寻求更好的解决方案。如果可以的话,我会进一步调查您的建议。我的临时解决方案是将我拥有的csv文件(以前已使用Excel转换为有问题的制表符分隔的文件),并与Google文档一起将其另存为.tsv。我之所以使用Gdocs,只是因为它是当时提供给我的最方便的文档应用程序。此转换有效。我相信,Pandas能够正确读取文件,然后继续执行我的其余代码。
user3062149

我怀疑您在Mac上看到的问题是线路终止符。在Mac上制作的电子表格会导致各种库产生各种有趣的行为,包括python中的csv_reader lib
brad sanders

Answers:


146

最大的线索是所有行都在一行上返回。这表明行终止符被忽略或不存在。

您可以为csv_reader指定行终止符。如果您使用的是Mac,则创建的行将以\rLinux标准结尾,而不是Linux标准,\n或者更好的是Windows的悬挂器和皮带方式\r\n

pandas.read_csv(filename, sep='\t', lineterminator='\r')

您也可以使用编解码器包打开所有数据。这可以增加健壮性,但以文档加载速度为代价。

import codecs

doc = codecs.open('document','rU','UTF-16') #open for reading with "universal" type set

df = pandas.read_csv(doc, sep='\t')

3
添加的编解码器代码对我有所帮助。然后我意识到read_csv中有一个参数也可以做到这一点。我添加了encoding ='utf-16',它为我解决了这个问题。
Mikhail Venkov

4

另一种选择是添加engine='python'到命令pandas.read_csv(filename, sep='\t', engine='python')

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.