You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Pandas能否在CSV中写入格式规范的列表与字典JSON数据?

Pandas导出CSV时列表/字典未生成有效JSON的解决方案

我之前也碰到过这个坑!Pandas默认导出包含列表、字典的列时,会直接用Python的repr()格式输出,完全不符合JSON规范,导致后续处理各种报错。先看你给出的示例:

示例代码

import pandas as pd
x = pd.DataFrame({'id': [1], 'parsed_json': [[{'a': False}]]})
x.to_csv(index=False)

导出的CSV结果

id,parsed_json
1,[{'a': False}]

划重点:这里第二列的[{'a': False}]用的是单引号,而JSON要求必须用双引号,所以这根本不是有效JSON,后续不管是重新读取还是其他系统解析都会出问题。

而且你提到的read_sql自动解析的问题也很棘手——它会把数据库里的JSON/文本数组直接转成Python原生类型,还没法关闭这个行为,这就导致导出CSV时的格式问题雪上加霜。

最靠谱的解决方案:手动将列转为标准JSON字符串

我们可以用json.dumps()把包含列表/字典的列强制转换成符合规范的JSON字符串,再导出CSV。

单列处理示例

import pandas as pd
import json

x = pd.DataFrame({'id': [1], 'parsed_json': [[{'a': False}]]})
# 把目标列转成标准JSON
x['parsed_json'] = x['parsed_json'].apply(json.dumps)
x.to_csv(index=False)

导出的正确CSV结果

id,parsed_json
1,"[{""a"": false}]"

现在第二列就是完全合法的JSON了,引号也符合规范,后续处理再也不会报错。

多列批量处理

如果有多个类似的列需要处理,可以用循环批量操作:

# 定义需要转换的列名列表
json_columns = ['parsed_json', 'user_metadata', 'product_details']
for col in json_columns:
    x[col] = x[col].apply(json.dumps)

重新读取时转回原生类型

如果之后需要把CSV里的JSON字符串再转回Python的列表/字典,可以在读取时用json.loads():

df = pd.read_csv('output.csv')
df['parsed_json'] = df['parsed_json'].apply(json.loads)

这样一套流程下来,就能完美解决Pandas导出CSV时的JSON格式问题了。

内容的提问来源于stack exchange,提问作者tresbot

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.25 06:24:11