如何用Python Pandas读取含异常引号与逗号的CSV文件
解决Pandas读取特殊格式CSV的问题
你的CSV格式不符合标准规范,导致Pandas默认解析逻辑出错。这里提供两种可行的解决思路:
方法一:预处理文件内容后读取
先清理每行的特殊首尾标记,再让Pandas按标准CSV规则解析:
import pandas as pd from io import StringIO # 读取原始文件内容 with open('test.csv', 'r', encoding='utf-8') as f: lines = f.readlines() # 逐行预处理 processed_lines = [] for line in lines: # 移除行首的双引号 line = line.lstrip('"') # 移除行尾的双引号+分号,保留换行符 line = line.rstrip('";\n') + '\n' # 处理空值:把原文件的""""替换为标准CSV空值格式"" line = line.replace('""""', '""') processed_lines.append(line) # 将处理后的内容转为内存对象,交给Pandas读取 df = pd.read_csv( StringIO(''.join(processed_lines)), sep=',', quotechar='"', skipinitialspace=True, # 跳过字段后的多余空格 keep_default_na=False, # 避免将空字符串默认转为NaN(按需调整) na_values=['""'] # 把""识别为NaN(按需调整) )
方法二:用Python内置csv模块手动解析
如果预处理仍有问题,借助csv模块的灵活性自定义解析逻辑:
import pandas as pd import csv data = [] with open('test.csv', 'r', encoding='utf-8') as f: for line in f: # 清理首尾特殊标记 cleaned_line = line.lstrip('"').rstrip('";\n') # 用csv.reader自动处理引号内的逗号分隔 reader = csv.reader([cleaned_line], quotechar='"', skipinitialspace=True) row = next(reader) # 处理空值:将""转为None(后续可转为NaN) processed_row = [x if x != '""' else None for x in row] data.append(processed_row) # 提取表头并转为DataFrame headers = data[0] df = pd.DataFrame(data[1:], columns=headers)
关键说明
- 原问题核心是每行的首尾特殊标记(开头
", 结尾";)干扰了Pandas的解析逻辑,必须先清理 - 字段内的逗号需要靠
quotechar='"'让解析器识别:引号包裹的内容里的逗号不算分隔符 - 原文件的空值
""""是CSV转义写法,对应标准空值格式"",需要替换或手动处理
内容的提问来源于stack exchange,提问作者steefan85
相关产品推荐
相关产品推荐

