我有一个25列的大csv文件,我想把它作为pandas数据帧来读。我正在使用pandas.read_csv()
。
问题是有些行有额外的列,类似于:
col1 col2 stringColumn ... col25
1 12 1 str1 3
...
33657 2 3 str4 6 4 3 #<- that line has a problem
33658 1 32 blbla #<-some columns have missing data too
当我试着读的时候,我发现了错误
^{pr2}$如果额外的值出现在第一行,则不会出现问题。例如,如果我将值添加到同一文件的第三行,则可以正常工作
#that example works:
col1 col2 stringColumn ... col25
1 12 1 str1 3
2 12 1 str1 3
3 12 1 str1 3 f 4
...
33657 2 3 str4 6 4 3 #<- that line has a problem
33658 1 32 blbla #<-some columns have missing data too
我的猜测是pandas检查前(n)行以确定列数,如果之后有额外的列,则解析它时会出现问题。在
跳过建议的here等有问题的行不是一个选项,这些行包含有价值的信息。在
有人知道怎么解决这个问题吗?在
一种可能的解决方法是指定列名。请参考我对类似问题的回答:https://stackoverflow.com/a/43145539/6466550
由于我没有找到一个完全解决这个问题的答案,所以我的工作如下:我发现显式地传递带有选项
names=('col1', 'col2', 'stringColumn' ... 'column25', '', '', '')
的列名允许我读取文件。它迫使我读取和解析每一列,这并不理想,因为我只需要其中的一半,但至少我现在可以读取文件了。 我把names
和usecols
结合起来,结果不起作用,如果有人有其他解决方案,我很乐意听到。在在我最初的帖子中,我提到不要在中使用“error_bad_lines”=False熊猫.read_csv. 我认为这样做是更恰当和优雅的解决方案。我发现这篇文章很有用。在
Can I redirect the stdout in python into some sort of string buffer?
我对答案中显示的代码做了一些改动。在
从那里你可以用
lines_skipped_log
做任何你想做的事情,比如输出到csv,创建一个数据帧等等也许你有一个满是文件的目录。您可以从每个日志中创建pandas数据帧的列表并进行连接。从那里你将有一个日志,哪些行被跳过,哪些文件在你的指尖(字面上!)。在
相关问题 更多 >
编程相关推荐