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

如何以向量化方式将Pandas DataFrame多列转为含字典的单列?

高效合并Pandas多列为字典格式单列的方案

针对大型Pandas DataFrame,要把RegAddress.CareOf、RegAddress.POBox这类前缀统一的列合并为每行是字典的RegAddress单列,最快的方式是利用Pandas内置的向量化操作,避免低效的逐行循环:

步骤1:筛选目标列

先提取所有以RegAddress.开头的列,确保只处理需要合并的字段:

target_cols = [col for col in df.columns if col.startswith('RegAddress.')]

步骤2:重命名列并转换为字典列表

通过重命名去掉列名的RegAddress.前缀,再用to_dict('records')直接生成每行对应的字典——这个方法是底层优化过的,性能远高于逐行apply:

# 构造列名映射:把RegAddress.CareOf转为CareOf
col_mapping = {col: col.split('.')[1] for col in target_cols}
# 转换为字典列表并赋值给新列
df['RegAddress'] = df[target_cols].rename(columns=col_mapping).to_dict('records')

可选:过滤空值键

如果不需要保留字典中空值对应的键,可以结合apply做轻量过滤(注意:此操作比纯to_dict稍慢,但仍远快于手动循环):

df['RegAddress'] = df[target_cols].rename(columns=col_mapping).apply(
    lambda x: {k: v for k, v in x.items() if pd.notna(v)},
    axis=1
)

示例演示

假设你的DataFrame是这样的:

import pandas as pd

data = {
    'RegAddress.CareOf': ['Alice', None, 'Bob'],
    'RegAddress.POBox': [123, 456, None],
    'OtherColumn': ['X', 'Y', 'Z']
}
df = pd.DataFrame(data)

执行上述代码后,df['RegAddress']的结果为:

  • 第一行:{'CareOf': 'Alice', 'POBox': 123}
  • 第二行:{'CareOf': None, 'POBox': 456}(如果用空值过滤则为{'POBox': 456})
  • 第三行:{'CareOf': 'Bob', 'POBox': None}(过滤后为{'CareOf': 'Bob'})

性能说明

to_dict('records')是Pandas针对行转字典场景优化的向量化方法,处理百万级数据的速度比自定义循环快几十倍。如果你的DataFrame规模极大,也可以考虑用pyarrow等库做进一步加速,但常规场景下内置方法足够满足需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 07:45:30