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

如何拆分Pandas DataFrame列中的字典为新列并展开成行?

嘿,我刚好处理过类似的需求,给你两种实用的解决方案,亲测有效:

方法一:用apply+stack组合处理

这是比较经典的处理方式,适配各种Pandas版本:

import pandas as pd

# 你的原始数据
df = pd.DataFrame([{'A': {'k1': 10}}, {'A': {'k2': 20, 'k3': 30}}, {'A': {'k4': 15}}])

# 核心处理代码
result = df['A'].apply(pd.Series).stack().reset_index(level=1).rename(columns={'level_1': 'keys', 0: 'values'})
# 清理多余列并重置索引
result = result.drop('A', axis=1).reset_index(drop=True)

print(result)

步骤拆解:

  • df['A'].apply(pd.Series):把列A里的每个字典转换成Series,原来的一行会扩展成多列(列名就是字典的键),没有的键会自动填充NaN;
  • .stack():把列索引“压”成行索引,这样所有非NaN的键值对都会变成单独的一行,形成多级索引的Series;
  • .reset_index(level=1):把第二级索引(也就是原来的字典键)转成普通列,同时保留值列;
  • 最后重命名列、删掉多余的列并重置索引,就得到你要的结果啦。
方法二:更高效的explode方案(Pandas 1.3.0+)

如果你的Pandas版本在1.3.0及以上,推荐用这个方法,数据量大的时候速度会快很多:

import pandas as pd

df = pd.DataFrame([{'A': {'k1': 10}}, {'A': {'k2': 20, 'k3': 30}}, {'A': {'k4': 15}}])

# 先把字典转成键值元组的列表
df['A'] = df['A'].apply(lambda x: list(x.items()))
# 把列表里的每个元组拆成单独一行
result = df.explode('A')
# 把元组拆成两列
result[['keys', 'values']] = pd.DataFrame(result['A'].tolist(), index=result.index)
# 清理收尾
result = result.drop('A', axis=1).reset_index(drop=True)

print(result)

步骤拆解:

  • lambda x: list(x.items()):把每个字典转成[(键, 值)]这样的元组列表;
  • explode('A'):把列表中的每个元组单独拆成一行,这一步是Pandas 1.3.0新增的实用功能;
  • pd.DataFrame(result['A'].tolist()):把元组列直接拆分成两列,最后清理掉多余的列就行。

不管用哪种方法,最终都会输出你想要的结果:

keys  values
0   k1      10
1   k3      30
2   k2      20
3   k4      15

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.29 06:39:35