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

如何在Pandas DataFrame中为列分配可迭代对象?修复字典列NaN问题

问题修复:为DataFrame每行生成现金流字典列

原始数据与需求

你有如下金融股票DataFrame,希望新增cashflows列,每行单元格是基于Characteristic1和Characteristic3生成的现金流字典:

import pandas as pd

df = pd.DataFrame(
    {
        "stockprice": [100, 103, 240],
        "Characteristic1": [1, 3, 3],
        "Characteristic2": [5, 7, 1],
        "Characteristic3": [1, 4, 6],
    },
    index=["Company A", "Company B", "Company C"],
)

错误原因分析

你尝试用assign直接传入Series调用cashflow_series函数时,函数接收的是整个Series而非每行的单个值,无法生成对应每行的字典,最终导致列值全为NaN。

修复方案

方案1:使用apply逐行处理

通过apply指定axis=1,让函数逐行接收每行数据,提取对应特征值生成字典:

def cashflow_series(ch1=1, ch2=2):
    return {0: ch1, 0.5: ch2, 1: 7, 2: 8, 3: 9}

# 新增cashflows列
df['cashflows'] = df.apply(lambda row: cashflow_series(ch1=row['Characteristic1'], ch2=row['Characteristic3']), axis=1)

执行后得到预期结果:

stockprice  Characteristic1  Characteristic2  Characteristic3               cashflows
Company A         100                1                5                1  {0: 1, 0.5: 1, 1: 7, 2: 8, 3: 9}
Company B         103                3                7                4  {0: 3, 0.5: 4, 1: 7, 2: 8, 3: 9}
Company C         240                3                1                6  {0: 3, 0.5: 6, 1: 7, 2: 8, 3: 9}

方案2:修改函数支持批量生成字典

如果数据集较大,批量处理效率更高,可修改函数接收Series并通过列表推导式生成每行的字典:

def cashflow_series(ch1_series, ch2_series):
    return [{0: ch1, 0.5: ch2, 1: 7, 2: 8, 3: 9} for ch1, ch2 in zip(ch1_series, ch2_series)]

# 使用assign新增列
df = df.assign(cashflows=cashflow_series(df['Characteristic1'], df['Characteristic3']))

此方法直接基于Series批量生成字典列表,避免逐行循环,性能更优。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.13 00:58:16