如何使用 Python pandas 在 read_csv 期间识别不良记录?

Posted

技术标签:

【中文标题】如何使用 Python pandas 在 read_csv 期间识别不良记录?【英文标题】:How to identify bad records during read_csv using Python pandas? 【发布时间】:2022-01-19 05:34:06 【问题描述】:

我有一个存储为 csv 文件的数据,其中包含 250 多列和 70 万条记录。我在读取选项期间遇到解析错误。我的目标不是解决它,而是调试/识别导致记录的错误

我已经提到了here、here、here 的帖子。所以,它不是重复的

当我尝试下面的代码时,我得到下面给出的解析错误

df1 = pd.read_csv('New__Document.csv',low_memory=False)

ParserError:标记数据时出错。 C 错误:预期有 258 个字段 第 14 行,看到 263

基于这个post,我遵循了以下建议,效果很好

 df = pd.read_csv('New__Document.csv',low_memory=False,on_bad_lines='skip')
 len(df)  # returns 365902 records

但是,这会导致记录丢失。因此,我尝试了另一个建议

df1 = pd.read_csv('New__Document.csv',low_memory=False, sep='\t')
len(df1) # returns 762521 records. 

但这不会以表格格式显示输出(由于制表符分隔符)。

我想以简洁的表格格式查看违规/不良记录(通过减去 = 396,619 条记录获得)。因为这个问题导致一半以上的数据集丢失。

那么,正在寻求您的帮助以了解导致此问题的原因吗?如果我能识别出那些导致错误的记录并将其以表格格式存储,这将有助于我复习

【问题讨论】:

【参考方案1】:

我建议您编写一个脚本来首先修复错误的行。您首先需要了解无效行有什么问题。 首先使用以下脚本显示哪些行不包含与表头相同的行数:

import csv

with open('New_Document.csv') as f_input:
    csv_input = csv.reader(f_input)
    header = next(csv_input)
    expected = len(header)
    
    for line_number, row in enumerate(csv_input, start=2):
        if len(row) != expected:
            print(line_number, row)

然后,您需要决定如何修复这些行,例如为缺失值提供默认值。以下类型 然后可以使用脚本来修复错误的行:

import csv

with open('New_Document.csv') as f_input, open('fixed.csv', 'w', newline='') as f_output:
    csv_input = csv.reader(f_input)
    csv_output = csv.writer(f_output)
    header = next(csv_input)
    expected = len(header)
    csv_output.writerow(header)
    
    for line_number, row in enumerate(csv_input, start=2):
        if len(row) != expected:
            # Add logic here to fix missing entries, this pads the row with zeros
            row.extend([0] * (expected - len(row)))
            print(f"Fixed line line_number")
    
        csv_output.writerow(row)

fixed.csv 然后应该使用 Pandas 正确加载

【讨论】:

以上是关于如何使用 Python pandas 在 read_csv 期间识别不良记录?的主要内容,如果未能解决你的问题,请参考以下文章

python pandas如何过滤剔除数据?

pandas.read_sql_query() 如何查询 TEMP 表?

使用 python 中 pandas 的 read_excel 函数将日期保留为字符串

python拾遗系列:pandas read_csv方法如何读取字符串变量

Python Pandas pandas.read_sql_table函数方法的使用

Python Pandas——Read_csv详解