有人知道如何解决此问题吗?
>>> df = pd.DataFrame({'A': range(3), 'B': range(1, 4)})
>>> df
A B
0 0 1
1 1 2
2 2 3
>>> df.transform(lambda x: 0 if (x == 0) else (-np.log(-x) if x < 0 else np.log(x)))
ValueError: ('The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().', 'occurred at index A')
答案 0 :(得分:1)
x==0
返回一系列True
和False
。例如,df['A'] == 0
返回具有pd.Series
值的[True, False, False]
。 if pd.Series([True, False, False])
应该是什么意思?这没有意义,这就是为什么它含糊不清。
此外,apply
不使用矢量化,因此请避免使用它。
改为使用np.select
df = np.select([df==0, df > 0, df < 0], [0, np.log(df), -np.log(-df)])
如果您想更深入地研究错误,则 ValueError:'系列的真值是不明确的。使用a.empty,a.bool(),a.item(),a.any()或a.all(),只需将其谷歌搜索即可。 There are tons of stackoverflow posts about it