我对python和panda比较陌生。我遇到了下列问题。
下面,当我在系列中使用test_fnc时,它是有效的,但当我通过series.apply(test_fnc)
方法在系列中应用它时,我得到"TypeError: 'int' object is not iterable" error
。
代码:
import pandas as pd
series = pd.Series([1,2,4,777,5])
print(series)
test_fnc = lambda u: [-x if x==777 else x for x in u]
print(test_fnc(series))
series.apply(test_fnc)
输出:
0 1
1 2
2 4
3 777
4 5
dtype: int64
[1, 2, 4, -777, 5]
---------------------------------------------------------------------------
TypeError Traceback (most recent call last)
<ipython-input-14-77e41380f6db> in <module>
4 test_fnc = lambda u: [-x if x==777 else x for x in u]
5 print(test_fnc(series))
----> 6 series.apply(test_fnc)
您不应该在函数中进行迭代,apply
已经在进行了。
相反,将函数定义为:test_fnc = lambda x: -x if x==777 else x
test_fnc = lambda x: -x if x==777 else x
series.apply(test_fnc)
输出:
0 1
1 2
2 4
3 -777
4 5
dtype: int64
如果这真的是要应用的函数,请使用矢量代码(就地修改(:
series.loc[series==777] *= -1
或用于新系列:
new = series.mask(series==777, -series)