Python Pandas:read.csv()-具有特定列长度的只读行
我有大约50k行的大型.csv文件,其中包含2000列数据,然后是大约200k行,其中包含6000列 我正在导入多个文件,其中包含:Python Pandas:read.csv()-具有特定列长度的只读行,python,pandas,csv,Python,Pandas,Csv,我有大约50k行的大型.csv文件,其中包含2000列数据,然后是大约200k行,其中包含6000列 我正在导入多个文件,其中包含: pd.concat((pd.read_csv(f,index_col='Unnamed: 0', error_bad_lines=False) for f in file_list)) 这可能会在6000列的第一行上给出一个错误,该行预期只有2000列,或者通过添加error\u bad\u lines=False跳过所有6000列行 在这种情况下,我很高兴在必
pd.concat((pd.read_csv(f,index_col='Unnamed: 0', error_bad_lines=False) for f in file_list))
这可能会在6000列的第一行上给出一个错误,该行预期只有2000列,或者通过添加error\u bad\u lines=False
跳过所有6000列行
在这种情况下,我很高兴在必要时丢弃所有2000列行。有什么方法可以对熊猫做到这一点吗?正如您所发现的,read\u csv从第一行开始计算其预期长度,并且只将过长的行视为“坏”;列太少的行用
NA
填充。根据具体情况,有几种解决方案可能适合您:
跳过短线。
如果您知道将有多少2000列行,特别是如果每个文件的行数相同,请使用skiprows
从6000列部分开始读取
阅读所有内容,然后删除不正确的行。
这需要一些努力,因为正如您所发现的,pandas使用文件的第一行来确定预期字段的数量;您需要添加一个包含6000列的标题,或者将长度正确的名称
传递到read\u csv
。这将导致2000列中填充大量的NA
值,之后可以使用带有适当阈值的dropna
删除超过4000NA
的行
事先对文件进行一些预处理
如果这是一种一次性情况,您只需要处理当前的一组文件,将来不会遇到新的文件,并且您可以使用命令行访问文件所在的位置,则只需使用一行awk
即可拉出所需长度的行:
awk -F, 'NF==6,000" file.csv > fixed_file.csv
非常全面的回复,谢谢。在这种情况下,我将使用#3。