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

如何处理Pandas中包含字典的字符串列?

批量解析Pandas DataFrame中的JSON格式字符串报错

问题背景

现有Pandas DataFrame结构如下:

IDcomputed_data
0987"{"Status":{"participate":14,"create":"10","activ":"0"},"rescount":22,"comcount":0,"partrate":0}"
4568"{"Status":{"participate":49,"create":"40","activ":"27"},"rescount":22,"comcount":0,"partrate":73.47}"
1234"{"Status":{"participate":3,"create":"3","activ":"1"},"comcount":0,"partrate":100,"rescount":42}"

想要访问computed_data列中的值,用eval(df["computed_data"][0])处理单个单元格正常,但用以下循环批量转换时:

data = []
for x, i in enumerate(df["Computed Data"]):
    data.append(eval(df["Computed Data"][x]))

出现错误:name 'null' is not defined,DataFrame无空值,形状为3601。


问题原因

  1. 部分单元格的JSON字符串包含JSON语法的null,但Python的eval()无法识别该关键字(Python对应为None),导致报错。
  2. 循环中使用的列名"Computed Data"与原DataFrame的列名"computed_data"大小写不匹配,可能引发额外问题。

解决方案

放弃eval(),使用Python内置的json模块解析,它能自动处理JSON与Python数据类型的转换(包括null转None),且更安全。

方法一:用apply()批量解析(高效推荐)

import json

# 确保列名与原DataFrame一致
df['parsed_data'] = df['computed_data'].apply(lambda x: json.loads(x.strip('"')))

注:若字符串外层包裹了多余的双引号,需用strip('"')去除,否则json.loads会解析失败

方法二:修正循环逻辑

import json

data = []
# 遍历列时使用正确的列名
for item in df['computed_data']:
    parsed_item = json.loads(item.strip('"'))
    data.append(parsed_item)

额外说明

eval()存在安全风险,若字符串包含恶意代码会直接执行,且无法兼容JSON的特殊语法(如true/false),使用专门的JSON解析工具是更稳妥的选择。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.05 08:10:24