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

如何在Pandas列中遍历字典列表并生成新列

解析Pandas列中的JSON字典并生成对应新列

问题场景

你手头的Pandas DataFrame里,某列的每个元素都是一组包含Name、Value、Unit的字典列表,想要把这些字典里的指标(比如Vacant结合Qty/Pct)作为新列名,对应的Value填充到新列中。比如示例数据里的Vacant有数量和占比两个维度,最终要生成Vacant_Qty、Vacant_Pct这类新列。

现有代码的问题

你当前的代码只是在拼接字符串s,完全没实现将值分配到新列的核心逻辑;而且用iterrows()逐行遍历的方式效率很低,处理大数据集时会明显拖慢速度。

推荐解决方案

我们可以用Pandas的向量式操作来高效完成这个任务,避免低效循环:

步骤1:构造示例DataFrame

先模拟你的数据场景方便演示:

import pandas as pd

# 模拟你的原始数据
data = {
    'Column': [
        [{'Name': 'Vacant', 'Value': 3904000, 'Unit': 'Qty'},
         {'Name': 'Vacant', 'Value': 11.7, 'Unit': 'Pct'},
         {'Name': 'Absorption', 'Value': 415000, 'Unit': 'Units'},
         {'Name': 'AbsorpOcc', 'Value': 1.4, 'Unit': 'Pct'},
         {'Name': 'Occupied', 'Value': None, 'Unit': 'Qty'}]
    ]
}
df = pd.DataFrame(data)

步骤2:解析字典列表生成新列

定义一个函数把每行的字典列表转换成横向的Series,再和原DataFrame合并:

def parse_json_items(json_list):
    # 把每个字典转成「Name_Unit: Value」的键值对
    column_map = {}
    for item in json_list:
        col_name = f"{item['Name']}_{item['Unit']}"
        column_map[col_name] = item['Value']
    return pd.Series(column_map)

# 生成新列并与原表合并
result_df = pd.concat([df, df['Column'].apply(parse_json_items)], axis=1)

# 可选:删除原始的Column列
result_df = result_df.drop('Column', axis=1)

步骤3:查看最终结果

运行后result_df会包含以下新列:
Vacant_Qty、Vacant_Pct、Absorption_Units、AbsorpOcc_Pct、Occupied_Qty,对应的值会正确填充,其中Occupied_Qty因为原Value是None,会自动填充为Pandas的缺失值NaN。

为什么推荐这个方法?

  • 避开了iterrows()的低效遍历,Pandas的向量操作在处理数据时性能更优
  • 逻辑清晰直接,把每个字典映射为对应的列名和值,后续维护或扩展都很方便
  • 自动处理缺失值,符合Pandas的数值类型规范

如果你一定要用循环(不推荐)

如果出于特殊需求必须用循环,也可以优化你的代码逻辑:

# 先收集所有可能的新列名
all_new_cols = set()
for row in df['Column']:
    for item in row:
        all_new_cols.add(f"{item['Name']}_{item['Unit']}")

# 初始化所有新列
for col in all_new_cols:
    df[col] = None

# 遍历填充每个单元格的值
for index, row in df.iterrows():
    for item in row['Column']:
        col_name = f"{item['Name']}_{item['Unit']}"
        df.at[index, col_name] = item['Value']

# 删除原始Column列
df = df.drop('Column', axis=1)

这种方法虽然可行,但处理大数据集时,效率远低于前面的向量式操作。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.09 19:58:14