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

如何解析Pandas DataFrame中的嵌套JSON字符串列并提取指定字段

解析DataFrame中的嵌套JSON字符串,生成结构化多列表

我来帮你搞定这个嵌套JSON解析的问题!针对你给出的DataFrame结构,我们可以一步步把嵌套的cost和monthly字段提取出来,最终得到你想要的清晰结构。下面是具体的实现步骤和代码:

1. 准备示例数据(补全你的原始数据)

首先我们先把你给出的示例DataFrame补全,确保每个JSON字符串包含我们需要的name、costs和monthly字段:

import pandas as pd
import json

d = {
    'id': ['10001', '10002'],
    'json': [
        '{"name": "frank", "costs": [{"cost": 15.85}], "monthly": 15.85}',
        '{"name": "mary", "costs": [{"cost": 30.86}], "monthly": 23.03}'
    ]
}
df = pd.DataFrame(d)

2. 解析JSON列并展开成结构化数据

我们先把JSON字符串转换成Python字典,再用pd.json_normalize把字典展开成单独的列:

# 将json字符串列解析为字典
df['json_dict'] = df['json'].apply(json.loads)

# 把字典列展开成结构化的DataFrame
json_expanded = pd.json_normalize(df['json_dict'])

3. 提取嵌套的cost字段并合并数据

因为costs是一个数组(即使只有一个元素),我们需要从数组中取出第一个元素的cost值,然后把原DataFrame的id列和展开后的列合并,最后筛选出我们需要的列:

# 合并原DataFrame的id列和展开后的JSON数据
combined_df = pd.concat([df[['id']], json_expanded], axis=1)

# 从costs数组中提取cost值,处理数组为空的边界情况
combined_df['cost'] = combined_df['costs'].apply(lambda x: x[0]['cost'] if x else None)

# 筛选出最终需要的列
final_df = combined_df[['id', 'name', 'cost', 'monthly']]

4. 查看最终结果

运行print(final_df)就能得到你想要的结构:

id   name   cost  monthly
0  10001  frank  15.85    15.85
1  10002   mary  30.86    23.03

简化版一步到位代码

如果你不想用中间变量,也可以把步骤合并成一行:

final_df = pd.concat([
    df[['id']],
    pd.json_normalize(df['json'].apply(json.loads))
], axis=1).assign(
    cost=lambda x: x['costs'].apply(lambda y: y[0]['cost'] if y else None)
)[['id', 'name', 'cost', 'monthly']]

注意事项

  • 如果你的costs数组可能有多个元素,需要根据需求调整提取逻辑(比如取总和、平均值,或者展开成多行)
  • 上面的代码已经处理了costs数组为空的情况,此时cost会返回None

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 04:12:18