无法将Pandas DataFrame写入CSV:大JSON转CSV报错求助
解决CSV写入报错:_csv.Error: need to escape, but no escapechar set
以下是几个直接有效的解决方法:
方法1:显式设置转义字符
在to_csv方法中添加escapechar参数,指定转义符号(比如反斜杠),让CSV写入器自动转义冲突字符:
data = pd.read_json(FILE + '.json', lines=True, chunksize=2000000, orient='records', encoding='utf-8') for i, chunk in enumerate(data): chunk.to_csv('../data_subset/{}'.format(FILE + '_' + str(i) + '.csv'), index=False, escapechar='\\')
方法2:强制给所有字段加引号
导入csv模块后,设置quoting=csv.QUOTE_ALL,让所有字段都被引号包裹,彻底避免分隔符与字段内容的冲突:
import csv import pandas as pd data = pd.read_json(FILE + '.json', lines=True, chunksize=2000000, orient='records', encoding='utf-8') for i, chunk in enumerate(data): chunk.to_csv('../data_subset/{}'.format(FILE + '_' + str(i) + '.csv'), index=False, quoting=csv.QUOTE_ALL)
方法3:预处理清理数据中的特殊字符
直接清理字符串字段里的换行符、未转义引号等问题字符,从数据源层面解决冲突:
data = pd.read_json(FILE + '.json', lines=True, chunksize=2000000, orient='records', encoding='utf-8') for i, chunk in enumerate(data): # 仅处理字符串类型的列 str_cols = chunk.select_dtypes(include=['object']).columns for col in str_cols: chunk[col] = chunk[col].str.replace('\n', ' ').str.replace('"', '\\"') chunk.to_csv('../data_subset/{}'.format(FILE + '_' + str(i) + '.csv'), index=False)
问题原因说明
报错本质是JSON数据中存在特殊字符(比如未转义的双引号、换行符、制表符等),写入CSV时这些字符与默认的分隔规则冲突,但pandas默认未设置转义机制,导致写入失败。上面三种方法分别从转义规则、字段包裹、数据预处理三个角度解决了冲突。
内容的提问来源于stack exchange,提问作者Shehryar Ahmed Subhani
相关产品推荐
相关产品推荐

