如何用Pandas正确读取含引号内逗号的大型CSV文件?
解决带引号内逗号的大型CSV读取与分割问题
一、最优CSV读取方案(直接用pandas正确解析)
你之前的错误在于设置了quoting=csv.QUOTE_NONE,这会让pandas忽略引号的存在,直接把所有逗号当成分隔符,导致解析出错。实际上pandas的read_csv默认就支持解析带引号的字段,只需去掉错误参数设置即可:
import pandas as pd # 直接读取,pandas会自动识别引号内的字段,忽略其中的逗号 df = pd.read_csv(r'C:\example_file.csv', encoding='utf-8')
如果CSV有特殊引号规则,可显式指定参数适配:
import pandas as pd import csv df = pd.read_csv( r'C:\example_file.csv', delimiter=",", quotechar='"', quoting=csv.QUOTE_MINIMAL, # 适配仅特殊字段加引号的场景,匹配你的示例 encoding='utf-8' )
针对200万行的大型文件,为避免内存溢出,可分块读取:
chunk_size = 100000 # 每次读取10万行 chunks = [] for chunk in pd.read_csv(r'C:\example_file.csv', encoding='utf-8', chunksize=chunk_size): chunks.append(chunk) df = pd.concat(chunks, ignore_index=True)
二、排除引号内逗号的字符串分割方法
如果需要手动处理字符串分割,Python标准库的csv模块原生支持正确解析带引号的字段,无需自行编写易出错的正则:
import csv import pandas as pd rows = [] with open(r'C:\example_file.csv', 'r', encoding='utf-8') as f: reader = csv.reader(f, delimiter=',', quotechar='"') headers = next(reader) # 读取列名 for row in reader: rows.append(row) df = pd.DataFrame(rows, columns=headers)
这种方式和pandas底层解析逻辑一致,能准确跳过引号内的逗号,逐行读取的模式也能降低大型文件的内存压力。
内容的提问来源于stack exchange,提问作者scrubcoder
相关产品推荐
相关产品推荐

