gpt4 book ai didi

python - 将函数应用于 pandas DataFrame 会给出值错误(只有一个参数)

转载 作者:太空宇宙 更新时间:2023-11-03 15:10:25 25 4
gpt4 key购买 nike

似乎我可以毫无问题地将一些函数应用于 DataFrame,但其他函数会给出值错误。

dates = pd.date_range('20130101',periods=6)
data = np.random.randn(6,4)

df = pd.DataFrame(data,index=dates,columns=list('ABCD'))

def my_max(y):
return max(y,0)

def times_ten(y):
return 10*y

df.apply(lambda x:times_ten(x)) # Works fine
df.apply(lambda x:my_max(x)) # Doesn't work

第一个应用工作正常,第二个生成:

ValueError: ('Series 的真值不明确。使用 a.empty、a.bool()、a.item()、a.any() 或 a.all()。', u'occurred在索引 A')

我知道我可以用其他方式生成“max(df,0)”(例如通过 df[df<0]=0),所以我不是在寻找这个特定问题的解决方案。相反,我感兴趣的是为什么上面的应用不起作用。

最佳答案

max 无法处理标量和数组:

>>> max(df['A'], 0)
ValueError: The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().

要么使用np.maximum哪个元素最大:

>>> def my_max(y):
... return np.maximum(y, 0)
...
>>> df.apply(lambda x:my_max(x))
A B C D
2013-01-01 0.000 0.000 0.178 0.992
2013-01-02 0.000 1.060 0.000 0.000
2013-01-03 0.528 2.408 2.679 0.000
2013-01-04 0.564 0.573 0.320 1.220
2013-01-05 0.903 0.497 0.000 0.032
2013-01-06 0.505 0.000 0.000 0.000

或使用 .applymap它按元素操作:

>>> def my_max(y):
... return max(y,0)
...
>>> df.applymap(lambda x:my_max(x))
A B C D
2013-01-01 0.000 0.000 0.178 0.992
2013-01-02 0.000 1.060 0.000 0.000
2013-01-03 0.528 2.408 2.679 0.000
2013-01-04 0.564 0.573 0.320 1.220
2013-01-05 0.903 0.497 0.000 0.032
2013-01-06 0.505 0.000 0.000 0.000

关于python - 将函数应用于 pandas DataFrame 会给出值错误(只有一个参数),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27505278/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com