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

如何通过字典值一次性为Pandas DataFrame分配多列?

解决Pandas中从字典结果提取值分配到多列的问题

你的问题出在:当直接对字典进行迭代时,Python默认会遍历字典的键,所以zip(*df["col2"].map(fun_function))拆分出来的是字典的键序列,而非值。以下是几种在调用端处理的可行方案:

方案1:用Lambda提取字典的值(保持顺序)

利用lambda将每个字典转换为值的列表,再进行拆分:

import pandas as pd

data = {
  "col1": [420, 380, 390],
  "col2": [50, 40, 45]
}
df = pd.DataFrame(data)

def fun_function(my_input):
    fun_dict = {}
    fun_dict["num1"] = str(my_input)[0]
    fun_dict["num2"] = str(my_input)[1]
    return fun_dict

# 修改后的调用代码
df["first_num_col"], df["last_num_col"] = zip(*df["col2"].map(lambda x: list(fun_function(x).values())))

注:Python 3.7及以上版本中,字典会保留插入顺序,所以values()的顺序和你定义num1、num2的顺序一致。

方案2:明确指定提取对应键的值(更稳妥)

如果担心字典顺序可能变化,直接指定提取目标键的值,避免依赖顺序:

df["first_num_col"], df["last_num_col"] = zip(*df["col2"].map(lambda x: (fun_function(x)["num1"], fun_function(x)["num2"])))

方案3:用Apply转换为DataFrame再合并

这种方式可读性更强,尤其适合字典键较多的场景:

# 将每个字典转换为一行的DataFrame
new_columns_df = df["col2"].apply(fun_function).apply(pd.Series)
# 重命名列并合并到原DataFrame
new_columns_df.columns = ["first_num_col", "last_num_col"]
df = pd.concat([df, new_columns_df], axis=1)

以上三种方案都不需要修改fun_function的返回值,完全在调用端完成值的提取与列分配。

内容的提问来源于stack exchange,提问作者Droid-Bird

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.07 20:01:10