使用 Pandas 读取 tab-delimited 文件 - 适用于 Windows,但不适用于 Mac

Reading tab-delimited file with Pandas - works on Windows, but not on Mac

我一直在使用 Pandas/Python 读取 Windows 中的 tab-delimited 数据文件,没有任何问题。数据文件的前三行包含注释,然后是 header。

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

如果将 error_bad_lines 参数设置为 read_csvFalse,我得到以下信息,一直持续到最后一行的末尾。

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.

上读取文件效果很好

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

您可以为 csv_reader 指定行终止符。如果您在 mac 上,创建的线条将以 \r 结束,而不是 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')

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