You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用pd.read_csv读取芝加哥犯罪CSV时部分行数据全存首列的解决方案求助

嘿,我之前碰到过一模一样的CSV解析问题!你说的前置双引号确实是罪魁祸首——pandas默认会把双引号当成字段的包裹符,那些行开头的引号会让pandas误以为整行都是一个字段,直接塞进第一列了。给你几个实用的解决办法,按靠谱程度排序:

1. 直接关闭或修改pandas的引号解析规则

这是最快的解决方式,不用修改原始文件。你可以通过read_csv的参数告诉pandas忽略这些捣乱的引号:

# 方法A:指定一个文件里不存在的字符作为引号标识符,让pandas跳过引号解析
crime_df = pd.read_csv('ChicagoCrime.csv', quote_char='\'')

# 方法B:完全关闭引号解析(更彻底)
import csv
crime_df = pd.read_csv('ChicagoCrime.csv', quoting=csv.QUOTE_NONE)

解释:csv.QUOTE_NONE会让pandas把所有引号都当成普通文本,不会用它来分割字段,这样那些前置双引号就不会干扰列的拆分了。

2. 预处理CSV文件,移除前置双引号

如果第一种方法还有问题,你可以先清理掉所有行开头的双引号,再读取:

import csv

# 读取原始文件,清理后写入新文件
with open('ChicagoCrime.csv', 'r', encoding='utf-8') as infile, open('Cleaned_ChicagoCrime.csv', 'w', encoding='utf-8', newline='') as outfile:
    reader = csv.reader(infile)
    writer = csv.writer(outfile)
    
    # 处理表头(如果有的话)和每一行数据
    for idx, row in enumerate(reader):
        if row and row[0].startswith('"'):
            # 去掉第一个字段开头的双引号
            row[0] = row[0].lstrip('"')
        writer.writerow(row)

# 读取清理后的文件
crime_df = pd.read_csv('Cleaned_ChicagoCrime.csv')
crime_df.head(10)

解释:这个方法从根源上消除了导致解析错误的因素,适合那些引号格式问题比较固定的场景。

3. 跳过错误行(不推荐,会丢数据)

你提到删除异常行只剩5%的数据,所以这个方法尽量不用,但可以用来快速验证问题:

# 跳过解析失败的行,会丢失大量数据,仅用于排查
crime_df = pd.read_csv('ChicagoCrime.csv', error_bad_lines=False)

解释:这个参数会自动跳过那些无法正确解析的行,但代价是丢失大部分数据,只适合临时确认问题确实出在这些行的格式上。

另外给你个小建议:用VS Code或Notepad++打开原始CSV,仔细看看那些异常行的格式——除了前置双引号,有没有字段内未闭合的引号?如果有的话,可能需要结合escapechar参数来处理,比如指定escapechar='\\'让pandas识别转义的引号。

内容的提问来源于stack exchange,提问作者nleh

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.14 08:35:02