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

如何将DataFrame中JSON字符串列解析为同DataFrame的新列?

Pandas解析JSON字符串列报错的解决方法

问题说明

现有如下包含JSON字符串列的Pandas DataFrame:

import pandas as pd
df = pd.DataFrame([{'sno':1, 'values':"[{'a':1, 'b':2,'c':3}]"},
                   {'sno':2, 'values':"[{'a':4, 'b':5,'c':6}]"}])

尝试通过assign结合json.loads解析JSON列生成新列时,触发错误:the JSON object must be str, bytes or bytearray, not Series。问题出在lambda中json.loads直接处理了整个Series,而非每行的单独字符串。我们需要将JSON列解析为如下结构的DataFrame:

sno    a     b     c
------------------------
1      1     2     3
2      4     5     6

可行解决方法

方法1:apply逐行解析+拼接DataFrame

利用apply对values列的每个字符串单独解析,再将解析后的字典转为DataFrame,最后和原DataFrame的sno列合并:

import json
import pandas as pd

# 替换单引号为双引号后解析JSON,取列表第一个元素
parsed_dicts = df['values'].apply(lambda x: json.loads(x.replace("'", "\""))[0])
# 合并原sno列和解析后的DataFrame
result_df = pd.concat([df['sno'], pd.DataFrame(parsed_dicts.tolist())], axis=1)
print(result_df)

注意:原生json.loads仅支持双引号包裹的JSON格式,因此需要先替换字符串中的单引号。

方法2:使用pd.json_normalize解析

json_normalize专门用于解析JSON数据,配合apply预处理字符串后直接解析:

import json
import pandas as pd

# 预处理字符串为可解析的JSON对象
df['values'] = df['values'].apply(lambda x: json.loads(x.replace("'", "\""))[0])
# 解析JSON列并与原sno列合并
result_df = df['sno'].to_frame().join(pd.json_normalize(df['values']))
print(result_df)

方法3:eval解析(仅适用于可信数据)

如果数据来源完全可信,可以用eval直接解析单引号格式的JSON字符串,省去替换引号的步骤:

import pandas as pd

parsed_dicts = df['values'].apply(lambda x: eval(x)[0])
result_df = pd.concat([df['sno'], pd.DataFrame(parsed_dicts.tolist())], axis=1)
print(result_df)

警告:eval会执行字符串中的任意代码,若数据包含恶意内容,会引发安全风险,非必要不使用。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.09 09:55:30