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

如何在Pandas DataFrame中提取JSON数组内同名键的列

解决方案

你可以通过提取每个列表中的name值并转换为多列DataFrame的方式实现需求,具体步骤如下:

步骤1:构造示例数据(模拟你的场景)

import pandas as pd

data = {
    'agencies': [
        [{'id': 29, 'name': 'Air Force, Dept of'}, {'id': 2, 'name': 'HOUSE OF REPRESENTATIVES'}, {'id': 1, 'name': 'SENATE'}],
        [{'id': 29, 'name': 'Air Force, Dept of'}, {'id': 2, 'name': 'HOUSE OF REPRESENTATIVES'}, {'id': 1, 'name': 'SENATE'}],
        [{'id': 2, 'name': 'HOUSE OF REPRESENTATIVES'}, {'id': 1, 'name': 'SENATE'}],
        [{'id': 2, 'name': 'HOUSE OF REPRESENTATIVES'}, {'id': 1, 'name': 'SENATE'}],
        [{'id': 2, 'name': 'HOUSE OF REPRESENTATIVES'}, {'id': 1, 'name': 'SENATE'}]
    ]
}
df = pd.DataFrame(data)

步骤2:提取name并转换为多列

# 提取每行的name列表,转换为Series(自动拆分为多列)
names_df = df['agencies'].apply(lambda x: pd.Series([d['name'] for d in x]))

# 重命名列名为name_1、name_2...name_n
names_df.columns = [f'name_{i+1}' for i in names_df.columns]

# 合并到原DataFrame(可选:删除原agencies列)
result = pd.concat([df.drop('agencies', axis=1), names_df], axis=1)

最终输出结果

name_1                      name_2    name_3
0  Air Force, Dept of  HOUSE OF REPRESENTATIVES  SENATE
1  Air Force, Dept of  HOUSE OF REPRESENTATIVES  SENATE
2  HOUSE OF REPRESENTATIVES                 SENATE     NaN
3  HOUSE OF REPRESENTATIVES                 SENATE     NaN
4  HOUSE OF REPRESENTATIVES                 SENATE     NaN

说明

  • 该方法会自动根据所有行中列表的最大长度生成对应数量的列,长度不足的行自动补NaN,完全匹配你的需求。
  • 针对20000行的数据集,这个方法的执行效率足够,无需额外优化。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 18:46:18