You need to enable JavaScript to run this app. 如何对Pandas DataFrame中字符串格式的数字列表列进行求和操作?
优惠活动
大模型
产品
解决方案
定价
更多

如何对Pandas DataFrame中字符串格式的数字列表列进行求和操作?

问题解答

1. 为什么apply看起来传入了整列数据而非单个单元格?

  • 实际上pd.Series.apply默认就是逐元素调用函数,不存在传入整列的情况,你调试时的错觉来源于NaN值的类型特性:原Charges列存在空值(最后一行为NaN),而str.findall方法碰到NaN值时不会返回空列表,会直接返回原始的NaN(本身属于float类型)。当函数尝试遍历这个float类型的NaN时,就抛出了'float' object is not iterable的错误,你误以为传入的是整列,实际只是传入了单个NaN值而已。

2. 空值的最优处理方案

不需要提前用fillna(0)修改原列,直接在自定义函数里做类型判断即可,对业务逻辑的侵入性更低:

def charge_sum(charge_list):
    # 仅列表类型为有效提取结果,其他情况直接返回对应值即可
    if not isinstance(charge_list, list):
        return 0
    return sum(float(num) for num in charge_list)

df['Summed Charges'] = df['Charges'].apply(charge_sum)

如果业务上要求空值对应的汇总列也保留空标记而非填0,只需要把返回值改成pd.NA即可:

import pandas as pd
def charge_sum(charge_list):
    if not isinstance(charge_list, list):
        return pd.NA
    return sum(float(num) for num in charge_list)

如果不想写独立的自定义函数,也可以用lambda表达式简化写法:

df['Summed Charges'] = df['Charges'].apply(lambda x: sum(map(float, x)) if isinstance(x, list) else 0)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.22 05:45:03