【问题标题】:pandas misreads lines in file [duplicate]熊猫误读文件中的行[重复]
【发布时间】:2018-11-19 15:50:02
【问题描述】:

我正在尝试使用 python 3.6 使用 pandas 读取以下文件:

$ cat tmp2.txt
somename     nan                                0       0     1     0     0       1       11    0.909091  0       0     1     0     0     7     1     1     0     0     0       0     2       
somename     nan                                0       0     1     0     0       1       36    0.972222  0       0     7     0     5     22    0     6     1     0     0       0     2       
somename UgzVrvH-ahjgfT9-NfN4AaABAg.8e3_FgQnopN8e4FLHwai7v0       0     1     0     0             0       25    0.920000  0       0     0     0     2     22    0     1     0     0     0       0           0   
somename     UgxyXxibolL_qOhMsyZ4AaABAg.8eApKy29u5J8eAxINbTH2m0       0     1     0     0       0       13    1.000000  0       0     0     0     1     10    0     2     0     0     0       0     0       
somename     nan                                0       0     0     0     0       2       56    0.839286  0       0     0     0     11    14    5     7     3     0     3       1     10

当我尝试用 pandas 阅读它时:

>>> import pandas as pd
>>> df  = pd.read_csv(header=None, filepath_or_buffer="tmp2.txt", delim_whitespace=True, index_col=0)
>>> df.values[2,:]
array(['UgzVrvH-ahjgfT9-NfN4AaABAg.8e3_FgQnopN8e4FLHwai7v0', 0, 1, 0, 0,
       0, 25, 0.92, 0.0, 0, 0, 0, 2, 22, 0, 1, 0, 0, 0, 0, 0, nan],
      dtype=object)
>>> df.values[3,:]
array(['UgxyXxibolL_qOhMsyZ4AaABAg.8eApKy29u5J8eAxINbTH2m0', 0, 1, 0, 0,
       0, 13, 1.0, 0.0, 0, 0, 0, 1, 10, 0, 2, 0, 0, 0, 0, 0, nan],
      dtype=object)
>>> df.values[4,:]
array([nan, 0, 0, 0, 0, 0, 2, 56.0, 0.8392860000000001, 0, 0, 0, 0, 11,
       14, 5, 7, 3, 0, 3, 1, 10.0], dtype=object)

当我打印df.values[2,:]df.values[3,:] 时可以看出,最后我得到了一个无关紧要的nan。似乎这可能是每行有最大字符数的问题,但pandas.read_csv 的手册页没有包含任何提及。

问题:是什么原因造成的?如何让 pandas.read_csv 正确读取该文件?

【问题讨论】:

    标签: python-3.x pandas


    【解决方案1】:

    类似这样:python pandas - trailing delimiter confuses read_csv

    您的输入数据在部分或全部行上有尾随分隔符。两个简单的修复方法是在read_csv() 中设置usecols,或者在阅读后执行以下操作:

    if df[df.columns[-1]].isnull().all():
        df.drop(df.columns[-1], axis=1, inplace=True)
    

    【讨论】:

      猜你喜欢
      • 2023-01-16
      • 2019-06-23
      • 1970-01-01
      • 2020-03-06
      • 2019-04-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-04-03
      相关资源
      最近更新 更多