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

使用apply调用函数时报错:TypeError: 'int' object is not iterable

问题原因

你犯了个典型的pandas apply 使用误区:

  • 直接调用test_fnc(series)时,u接收的是整个Series对象,它是可迭代的,所以列表推导式能正常遍历每个元素。
  • 但series.apply(test_fnc)会把Series里的每个单个元素(比如1、2、777这种int值)逐个传给test_fnc,这时候你的lambda函数里for x in u就变成了遍历单个int,自然会报int object is not iterable的错误。
解决方案

方案1:直接用原函数处理(最省事)

既然你的函数本来就能直接处理整个Series,完全没必要用apply,直接用test_fnc(series)就行,结果已经符合预期。

方案2:修改函数适配apply

如果一定要用apply,把函数改成处理单个元素的逻辑,不要做遍历:

import pandas as pd
series = pd.Series([1,2,4,777,5])
# 改成处理单个值的lambda
test_fnc = lambda x: -x if x == 777 else x
# 现在apply就能正常运行
result = series.apply(test_fnc)
print(result)

输出:

0      1
1      2
2      4
3    -777
4      5
dtype: int64

方案3:更符合pandas风格的写法(推荐)

pandas里这种元素替换操作,用where或mask比apply效率更高(尤其是大数据量时):

import pandas as pd
series = pd.Series([1,2,4,777,5])
# where:满足条件就保留原值,不满足就替换
result = series.where(series != 777, -series)
# 或者用mask:满足条件就替换,不满足保留原值
# result = series.mask(series == 777, -series)
print(result)

输出和上面一致。

内容的提问来源于stack exchange,提问作者Musa H. Asyali

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.22 07:24:22