Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/280.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Pandas:read.csv()-具有特定列长度的只读行_Python_Pandas_Csv - Fatal编程技术网

Python Pandas:read.csv()-具有特定列长度的只读行

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列行 在这种情况下,我很高兴在必

我有大约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列行


在这种情况下,我很高兴在必要时丢弃所有2000列行。有什么方法可以对熊猫做到这一点吗?

正如您所发现的,read\u csv从第一行开始计算其预期长度,并且只将过长的行视为“坏”;列太少的行用
NA
填充。根据具体情况,有几种解决方案可能适合您:

跳过短线。

如果您知道将有多少2000列行,特别是如果每个文件的行数相同,请使用
skiprows
从6000列部分开始读取

阅读所有内容,然后删除不正确的行。

这需要一些努力,因为正如您所发现的,pandas使用文件的第一行来确定预期字段的数量;您需要添加一个包含6000列的标题,或者将长度正确的
名称
传递到
read\u csv
。这将导致2000列中填充大量的
NA
值,之后可以使用带有适当阈值的
dropna
删除超过4000
NA
的行

事先对文件进行一些预处理

如果这是一种一次性情况,您只需要处理当前的一组文件,将来不会遇到新的文件,并且您可以使用命令行访问文件所在的位置,则只需使用一行
awk
即可拉出所需长度的行:

awk -F, 'NF==6,000" file.csv > fixed_file.csv

非常全面的回复,谢谢。在这种情况下,我将使用#3。