如何使用pandas read_csv读取含逗号及嵌套双引号的CSV文件
如何用pandas读取含嵌套双引号和内部逗号的非标准CSV
你碰到的这个CSV属于非标准格式——正常CSV规范里,嵌套双引号需要用两个连续双引号转义(比如"ABC is not ""XYZ"", but ABC"),但你的数据里是单个双引号嵌套,还包含内部逗号,直接用read_csv会出现解析错误。下面给两种实用的解决办法:
方法一:先修复CSV格式再读取
先把文件里的嵌套单个双引号替换成标准的双转义双引号,再正常读取:
import pandas as pd # 读取原始文件内容,替换嵌套的单双引号 with open('你的文件.csv', 'r', encoding='utf-8') as f: content = f.read().replace('"XYZ"', '""XYZ""') # 将修复后的内容保存为新文件(也可用StringIO直接在内存处理) with open('修复后文件.csv', 'w', encoding='utf-8') as f: f.write(content) # 正常读取修复后的CSV df = pd.read_csv('修复后文件.csv')
如果嵌套双引号的内容不固定,用正则批量替换更灵活:
import re # 匹配引号内的单个双引号并替换为两个 content = re.sub(r'(?<=[^,])"([^",]+)"(?=[^,])', r'""\1""', content)
方法二:自定义解析逻辑处理非标准格式
用Python内置的csv.reader自定义解析规则,再转成DataFrame,适合没法提前修改文件的场景:
import pandas as pd import csv # 自定义CSV解析规则:关闭自动双引号转义,按逗号拆分后手动合并字段 class CustomCSV(csv.Dialect): delimiter = ',' quotechar = '"' doublequote = False # 关闭双引号自动转义 skipinitialspace = True lineterminator = '\n' quoting = csv.QUOTE_MINIMAL rows = [] with open('你的文件.csv', 'r', encoding='utf-8') as f: reader = csv.reader(f, dialect=CustomCSV) for row in reader: # 因内部逗号,原本的第二个字段会被拆成多个元素,手动合并还原 if len(row) > 3: fixed_row = [row[0], ','.join(row[1:-1]), row[-1]] rows.append(fixed_row) else: rows.append(row) # 转换为DataFrame df = pd.DataFrame(rows)
注意:这个方法的合并逻辑需要根据你的实际CSV结构调整,如果嵌套引号的位置更复杂,需用正则匹配精准识别完整字段。
内容的提问来源于stack exchange,提问作者Sebastian
相关产品推荐
相关产品推荐

