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

标签 python pandas csv

我有大约 5 万行的大型 .csv 文件,其中包含 2,000 列的数据,然后是大约 20 万行,其中包含 6,000 列。

我正在导入多个文件:

pd.concat((pd.read_csv(f,index_col='Unnamed: 0', error_bad_lines=False) for f in file_list))

这可能会在 6,000 列的第一行上给出错误,而它预计只有 2,000 列,或者通过添加 error_bad_lines=False 它会跳过所有 6,000 列行。

在这种情况下,如果有必要,我很乐意丢弃所有 2,000 列行。有什么方法可以用 pandas 做到这一点吗?

最佳答案

正如您所发现的,read_csv 从第一行获取其预期长度,并且仅将过长的行视为“坏”;列太少的行用 NA 填充。根据具体情况,有一些可能适合您的解决方案:

跳过短行。

如果您知道将有多少个 2,000 列的行,特别是如果每​​个文件都相同,请使用 skiprows 从 6,000 列部分的开头开始阅读。

阅读所有内容,然后删除坏行。

这需要一些努力,因为正如您所发现的,pandas 使用文件的第一行来确定预期字段的数量;您需要添加包含 6,000 列的标题或将正确长度的 names 传递给 read_csv 。这将导致您的 2,000 列行填充大量 NA 值,之后您可以使用 dropna 和适当的阈值来删除包含超过 4,000 个 NA 的行。

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

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

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

关于python - Pandas:read.csv() - 只读具有特定列长度的行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50349287/

相关文章:

python - 将 Pandas 中的单元格拆分为多行

python - 修改 pandas df 中的单元格不成功

python - 使用变量访问 SQLAlchemy 表列名

powershell - 在 Foreach 之前加速测试连接

python - 如何编写一个 python 脚本,根据特定键合并两个 csv 文件中的列

python - 将 C# P/Invoke 代码转换为 Python ctypes?

python - 在列表列表中查找最小值并返回该列表

javascript - 将 d3.csv 修改为小写列名的正确方法

python - Django一对多关系: number of objects

python - 将不相等的数据框与所有值合并