Pandas read_csv具有不均匀的行长度作为标题

时间:2017-01-13 23:00:39

标签: python pandas

有一个长度不均匀的txt文件

LS-DYNA user input                                                      
                         ls-dyna mpp.78769 s              date 01/02/2013

 constraint #      axial        shear         time  failure                                       length  rslt moment      torsion
       1720  8.39282E-01  6.55466E-01  1.20000E+03      0.0    spotweld beam  ID     938970  4.47325E+01  2.24041E+00
       1721  3.30134E-01  5.08016E-01  1.20000E+03      0.0    spotweld beam  ID     938971  4.47310E+01  1.70857E+00
       1722  9.52039E-01  2.24977E+00  1.20000E+03      0.0    spotweld beam  ID     938972  3.50040E+00  1.14531E+01
       1723  1.37947E+00  3.75614E+00  1.20000E+03      0.0    spotweld beam  ID     938973  2.99986E+00  3.72429E+01
       1724 -1.29900E+00  8.59783E-01  1.20000E+03      0.0    spotweld beam  ID     938974  3.50112E+00  1.11357E+01
       1725 -1.39978E+00  5.05035E+00  1.20000E+03      0.0    spotweld beam  ID     938975  2.99934E+00  1.69379E+01
       1726 -8.28811E-01  2.36767E+00  1.20000E+03      0.0    spotweld beam  ID     938976  3.50022E+00  1.01569E+01
       1727 -8.02390E-01  2.83158E+00  1.20000E+03      0.0    spotweld beam  ID     938977  2.99945E+00  5.26153E+01
       1728  2.45994E+01  2.55278E+02  1.20000E+03      0.0    spotweld beam  ID     938978  3.51565E+00  1.03888E+01
       1729  3.79365E+01  1.91420E+01  1.20000E+03      0.0    spotweld beam  ID     938978  2.99987E+00  8.96939E+00

不使用skiprows,因为没有数据的行会在不同情况下发生变化,我试图通过

来读取文件
pd.read_csv(File, header=None, delim_whitespace=True)

这会让我误以为

pandas.parser.CParserError: Error tokenizing data. C error: Expected 3 fields in line 2, saw 5

然后我重新定义了pandas参数,如

my_cols = ['A', 'B', 'C', 'D', 'E','F','G']
elout= pd.read_csv(File, names=my_cols, header=None, delim_whitespace=True)

没有问题。除了这种愚蠢的方式,我还有其他设置可以解决这个问题吗?

谢谢!

1 个答案:

答案 0 :(得分:0)

如果您不想使用skiprows,另一种方法是自己打开文件,例如f = open(File)。然后你f.readline()并手动解析你不感兴趣的第一行。一旦通过f提取标题的有用部分并且文件指针到达表的开头,只需将f作为第一个参数传递给read_csv,并且pandas将开始处理数据从那时起。