在将csv读取到数据帧时忽略eof字符

时间:2014-06-04 13:35:22

标签: python csv pandas eof

我有一个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

0 个答案:

没有答案