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

如何解决Pandas read_csv读取含分隔符字段的文件报错问题?

解决Pandas读取含内嵌分隔符/异常引号文本文件的问题

方法1:指定引号与转义规则(适配规范格式)

如果字段内的分隔符被引号包裹,或内嵌引号有转义标识,直接在read_csv中配置对应参数,让Pandas忽略引号范围内的分隔符:

  • 针对竖线分隔场景(若字段用引号包裹含竖线的内容):
import pandas as pd
df = pd.read_csv('target_file.txt', sep='|', quotechar='"', skipinitialspace=True)
  • 针对补充的分号分隔场景(字段内有转义引号):
# 假设字段内引号用反斜杠转义,如实际内容为 "Value1";"(\\"value2";\\"Value3\\")"
df = pd.read_csv('target_file.csv', sep=';', quotechar='"', escapechar='\\')

方法2:自定义逐行解析逻辑(处理非规范格式)

如果文件格式不规范(比如引号不成对、内嵌分隔符未被包裹),可以手动跟踪引号开闭状态,识别真正的分隔符:

import pandas as pd

def parse_line(line):
    parts = []
    current_segment = []
    in_quote = False
    for char in line.strip():
        if char == '"':
            in_quote = not in_quote
            current_segment.append(char)
        elif char == ';' and not in_quote:  # 仅在非引号状态下把分号当成分隔符
            parts.append(''.join(current_segment))
            current_segment = []
        else:
            current_segment.append(char)
    parts.append(''.join(current_segment))
    return parts

# 读取并解析文件
with open('target_file.csv', 'r', encoding='utf-8') as f:
    lines = f.readlines()
header = parse_line(lines[0])
rows = [parse_line(line) for line in lines[1:]]
df = pd.DataFrame(rows, columns=header)

方法3:跳过/标记错误行(临时应急方案)

若优先保证数据加载,可跳过解析错误的行并获取提示,适合快速查看数据场景:

# Pandas 1.3.0及以上版本用法
df = pd.read_csv('target_file.txt', sep='|', on_bad_lines='warn')
# 旧版本用法(已过时)
df = pd.read_csv('target_file.txt', sep='|', error_bad_lines=False, warn_bad_lines=True)

方法4:用Python内置csv模块预处理

内置csv模块对复杂格式的兼容性更强,可先解析再转为DataFrame:

import pandas as pd
import csv

with open('target_file.csv', 'r', encoding='utf-8') as f:
    # 配置分隔符、引号符、转义符
    reader = csv.reader(f, delimiter=';', quotechar='"', escapechar='\\')
    data = list(reader)
df = pd.DataFrame(data[1:], columns=data[0])

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.14 07:50:31