如何在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
相关产品推荐
相关产品推荐

