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

传递numpy.float64参数给pandas.Series.apply()报错,求解决方案

问题解决:Series.apply()参数传递错误及优化方案

错误原因

你遇到的TypeError和numpy.float64无关,问题出在**Series.apply()的参数传递方式**上:

  • apply()的args参数要求传入一个可迭代对象(比如元组),用来传递给自定义函数的额外参数
  • 你直接写apply(normalization, pop_mean, pop_sd),会把pop_mean当成args参数传入,而pop_mean是单个numpy.float64,不是可迭代对象,所以触发"Value after * must be an iterable"错误

另外,voting_df['pop_estimate'].mean()和.std()本身就是pandas实现的方法,返回numpy.float64是正常行为,强制用pandas版本也解决不了这个问题——因为问题根本不在这。

修复方案

方案1:正确使用args参数

把额外参数打包成元组传给args:

voting_df['pop_estimate'] = voting_df['pop_estimate'].apply(normalization, args=(pop_mean, pop_sd))

方案2:用lambda函数包装

通过lambda直接传递参数,写法更直观:

voting_df['pop_estimate'] = voting_df['pop_estimate'].apply(lambda x: normalization(x, pop_mean, pop_sd))

方案3:推荐使用向量化操作(更高效)

apply()本质是逐行循环,效率远低于pandas的向量化运算。直接对整个Series做数学运算即可,完全不需要自定义函数和apply:

voting_df['pop_estimate'] = (voting_df['pop_estimate'] - pop_mean) / pop_sd

这种方式不仅代码更简洁,运行速度也比apply()快很多,尤其当数据量较大时优势明显。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 09:20:13