我有一个csv文件,我认为它起源于Windows并且有一些线路和放大器文件结尾,我不习惯。在行之间,它在python中显示为'\r\n'
,最后它具有'\r\n\x1a'
(在二进制模式下读取时)。
当我尝试使用pd.read_csv()
阅读时,它会给我一个额外的行,第一个条目为'\x1a'
,其余条目为NaN。
In [1]: import pandas as pd
In [2]: from StringIO import StringIO
In [3]: s = StringIO('a,b\r\n1,2\r\n3,4\r\n\x1a')
In [4]: df = pd.read_csv(s)
In [5]: df
Out[5]:
a b
0 1 2
1 3 4
2 NaN
这个文件的结尾是否足够通用,是否有一个内置选项可以在pandas中忽略它?如果没有,是否有任何关于不将EOF字符读入数据框的建议,或者是手动测试它并在阅读后丢弃该行的最佳方法?
修改:
我的初步解决方案是在阅读后应用此功能:
def strip_eof(df):
"Drop last row if it begins with '\x1a' ends with NaN's"
lastrow = df.iloc[-1]
if lastrow[0] == '\x1a' and lastrow[1:].isnull().all():
return df.drop([lastrow.name], axis=0)
return df