代码之家  ›  专栏  ›  技术社区  ›  irritable_phd_syndrome

熊猫误读文件中的行[副本]

  •  1
  • irritable_phd_syndrome  · 技术社区  · 6 年前

    这个问题已经有了答案:

    我正在尝试使用Python3.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
    

    当我试着和熊猫一起读的时候:

    >>> 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正确读取此文件?

    1 回复  |  直到 6 年前
        1
  •  0
  •   John Zwinck    6 年前

    与此类似: python pandas - trailing delimiter confuses read_csv

    您的输入数据在某些或所有行上有尾随分隔符。有两个简单的方法 usecols 在里面 read_csv() ,或者在阅读之后执行以下操作:

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