如何通过Pandas to_csv写入无空格格式的JSON对象?
解决方案
要实现将DataFrame中的dict/嵌套JSON列以紧凑无空格的格式写入CSV,核心是先将这些列转换为指定格式的字符串,再导出CSV。以下是具体实现方法:
1. 处理单个JSON列
使用json.dumps()配合separators=(':', ',')参数生成紧凑格式的JSON字符串,通过apply()作用于目标列:
import pandas as pd import json # 示例DataFrame df = pd.DataFrame({ 'id': [1, 2], 'nested_json': [{'field': 'value', 'field2': 'value2'}, {'level1': {'level2': 'val'}}] }) # 转换目标列为紧凑JSON字符串 df['nested_json'] = df['nested_json'].apply(lambda x: json.dumps(x, separators=(':', ','))) # 导出CSV df.to_csv('compact_output.csv', index=False)
导出后,nested_json列的内容会变成:{"field":"value","field2":"value2"}(符合JSON标准的双引号格式,CSV会自动处理引号转义)。
2. 处理多个JSON列
如果有多个需要转换的列,可以循环遍历目标列列表,批量处理:
# 定义需要处理的JSON列名 json_cols = ['col_a', 'col_b', 'col_c'] for col in json_cols: # 空值处理:仅对非空的dict执行转换 df[col] = df[col].apply( lambda x: json.dumps(x, separators=(':', ',')) if pd.notna(x) else x ) # 导出CSV df.to_csv('multi_col_output.csv', index=False)
3. (可选)转为单引号格式(不推荐)
如果坚持要输出单引号格式(如示例中的{'field':'value'}),可以在json.dumps()后替换引号,但需注意若字符串本身包含双引号,可能导致格式异常:
df['nested_json'] = df['nested_json'].apply( lambda x: json.dumps(x, separators=(':', ',')).replace('"', "'") )
关键说明
- Pandas默认将dict转为字符串时会保留格式化空格,无法通过
to_csv()的参数直接控制,因此必须提前转换列内容。 json.dumps()能完美处理嵌套JSON结构,无需手动解析嵌套层级。
内容的提问来源于stack exchange,提问作者yogi
相关产品推荐
相关产品推荐

