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

为何在DataFrame上调用json.dumps()会出现结果及导出文件差异?

问题分析:json.dumps()在DataFrame中的表现差异

核心原因:两次操作中列a的初始数据类型不同

  • 第一组操作:
    初始DataFrame的列a存储的是Python列表对象(dtype为object,实际内容是[])。执行json.dumps(x['a'])时,是将列表[]序列化为字符串"[]"。Pandas在显示DataFrame时,对于内容为"[]"的字符串,会省略外层引号(因其与列表[]的字符串表示完全一致),但实际数据类型已转为str。导出CSV时,字符串"[]"直接写入,无需额外转义,因此CSV内容为:

    ,a
    0,[]
    1,[]
    
  • 第二组操作:
    原DataFrame导出到CSV时,由于CSV无法存储Python列表,Pandas会将列表[]转为字符串"[]"写入文件;用read_csv读取后,列a的内容变为字符串"[]"(dtype为object)。此时执行json.dumps(x['a']),是对字符串"[]"做序列化,得到结果'"[]"'(为JSON格式的字符串,外层多一层双引号)。Pandas显示时会展示这层引号,导出CSV时,因字符串包含双引号,需按CSV规则用两个双引号转义,因此CSV内容为:

    ,a
    0,"""[]"""
    1,"""[]"""
    

验证数据类型的方法

通过以下代码可确认数据类型差异:

# 第一组操作后
print(df.dtypes)          # 输出:a    object
print(type(df['a'].iloc[0]))  # 输出:<class 'str'>

# 第二组操作读取CSV后(未执行json.dumps前)
print(df.dtypes)          # 输出:a    object
print(type(df['a'].iloc[0]))  # 输出:<class 'str'>

# 第二组操作执行json.dumps后
print(type(df['a'].iloc[0]))  # 输出:<class 'str'>,内容为'"[]"'

总结

两次操作的本质区别是初始处理的数据类型不同:第一次是对列表进行JSON序列化,第二次是对字符串进行JSON序列化,最终生成的字符串内容存在差异,这直接导致了Pandas显示和CSV导出的结果不同。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.02 10:33:30