如何解决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
相关产品推荐
相关产品推荐

