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

如何用Pandas apply()自动解析未知长度/键的字典返回值

两种可行实现思路

思路1:直接利用apply的result_type='expand'自动扩展

不用提前指定列名,当apply返回字典时,设置result_type='expand'会自动把字典的键作为新列名,对应值填充到列中,最后把扩展后的结果和原DataFrame合并即可。

示例代码:

import pandas as pd

def func(x):
    # 模拟返回动态键的字典(不同行可返回不同键)
    if x % 2 == 0:
        return {'B': x+1, 'C': x+2}
    else:
        return {'B': x+1, 'D': x+3}

df = pd.DataFrame({'A': range(5)})
# 执行apply并自动展开字典为列
expanded_df = df.apply(lambda x: func(x['A']), axis=1, result_type='expand')
# 合并原DataFrame和展开后的列
df = pd.concat([df, expanded_df], axis=1)
print(df)

输出会自动生成所有字典中出现过的列,缺失值用NaN填充:

A  B    C    D
0  0  1  2.0  NaN
1  1  2  NaN  4.0
2  2  3  4.0  NaN
3  3  4  NaN  6.0
4  4  5  6.0  NaN

思路2:先存字典到单列,再拆分展开

如果需要保留原始字典数据,或者中间要对字典做额外处理,可以先把字典存入DataFrame的单个列,再将该列拆分为多列。

示例代码:

import pandas as pd

def func(x):
    return {'B': x+1, 'C': x+2}

df = pd.DataFrame({'A': range(5)})
# 先将字典存入单列
df['result_dict'] = df.apply(lambda x: func(x['A']), axis=1)
# 将字典列拆分为多列
expanded_df = pd.DataFrame(df['result_dict'].tolist())
# 合并并删除临时字典列
df = pd.concat([df, expanded_df], axis=1).drop('result_dict', axis=1)
print(df)

输出结果和原示例一致:

A  B  C
0  0  1  2
1  1  2  3
2  2  3  4
3  3  4  5
4  4  5  6

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.07 22:42:44