我有一个CSV文件,我正在使用Python解析它。我发现文件中的一些行有不同的列数。
001;Snow,Jon;19801201
002;Crom,Jake;19920103
003; ;Wise,Frank;19880303 <-- Invalid row
004;Wiseau,Tommy;4324;1323;2323 <-- Invalid row
我想将这些无效行写入单独的文本文件。
我使用这行代码从文件中读取。
df = pd.read_csv('names.csv', header=None,sep=';')
我发现here的一个解决方案是使用以下代码跳过有问题的行:
data = pd.read_csv('file1.csv', on_bad_lines='skip')
我可以将'skip'改为'warn',这将给予有问题的行的行号并跳过该行,但这将返回警告消息而不是行本身。
2条答案
按热度按时间mitkmikd1#
由于
pandas
1.4.0允许callable
作为**on_bad_lines
**参数,因此允许您对坏行应用更复杂的处理。版本1.4.0中的新增功能:
由seps拆分的字符串列表。如果函数返回None,则错误行将被忽略。如果函数返回的新字符串列表包含的元素多于预期,则在删除多余元素时将发出ParserWarning。仅在engine=“python”时支持
因此,您可以传递一个自定义函数,该函数将遇到的坏行写入特定文件并返回
None
(在生成 Dataframe 时跳过该行)。Dataframe 的输出:
bad_lines.csv
的内容(通过cat
命令):tzdcorbm2#
你可以在载入Pandas之前用一个脚本来分割csv文件,比如: