You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

Python读取CSV文件时逗号分隔符失效:部分行无法正确拆分

问题原因与解决方案

从你提供的CSV内容和代码来看,导致后续行无法正确拆分到对应列的主要原因有这几个:

1. 未闭合的引号与字段内嵌入的逗号

看第二行的内容:

2021/05/31,2012,"10","S","","Dis","DI","EX,,0.00,,"Pt",0,

这里存在一个严重的格式错误:"EX,,0.00,, 这个部分的引号没有正确闭合,而且字段内部还包含了逗号。pandas.read_csv 默认会把被quotechar(默认是双引号)包裹的内容当作单个字段,但如果引号未闭合,它会把整行剩余的内容都归为这个未闭合的字段,自然就无法按照表头拆分到对应列了。

2. HTML转义的引号干扰解析

你的CSV里用了"(HTML的双引号转义字符),而read_csv 默认不会识别这种转义,它会把"当作普通字符串的一部分,而不是实际的引号。这就导致原本应该被引号包裹的字段(比如"10")无法被正确识别,进一步加剧了解析混乱。

3. 行尾的多余逗号(次要)

你提供的两行数据末尾都有多余的逗号,这会导致解析时出现额外的空列,也会影响列的匹配,但这不是核心问题。


解决方案

我们可以先预处理CSV内容,修复格式问题后再解析:

步骤1:处理HTML转义的引号

先把所有"替换成实际的双引号",让read_csv能正确识别引号包裹的字段。

步骤2:修复未闭合的引号

检查并修复行内未闭合的引号(比如行内引号数量为奇数的情况,补充引号闭合)。

步骤3:用pandas解析处理后的内容

下面是具体的代码实现:

import pandas as pd
from io import StringIO

# 读取原始CSV文件并处理转义引号
with open(r'C:\file.csv', 'r', encoding='utf-8') as file:
    raw_content = file.read().replace('"', '"')

# 修复未闭合的引号(处理行内引号数量为奇数的情况)
fixed_lines = []
for line in raw_content.split('\n'):
    if not line.strip():
        fixed_lines.append(line)
        continue
    quote_count = line.count('"')
    if quote_count % 2 != 0:
        # 假设最后一个引号未闭合,先去掉行尾多余逗号再补引号
        line = line.rstrip(',') + '"'
    fixed_lines.append(line)

# 生成修复后的内容并解析为DataFrame
fixed_content = '\n'.join(fixed_lines)
df = pd.read_csv(StringIO(fixed_content), sep=',', quotechar='"')
print(df.head())

如果你的CSV里还有其他格式问题(比如特定字段的引号错误),可能需要根据实际内容调整修复逻辑,但上面的代码应该能解决你当前遇到的核心问题。

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

火山引擎 最新活动