df.transform中的ValueError(lambda x:如果(x == 0)则为0,否则(-np.log(-x)如果x <0则为np.log(x)))

时间:2019-03-23 16:17:53

标签: python pandas

有人知道如何解决此问题吗?

>>> 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')

1 个答案:

答案 0 :(得分:1)

x==0返回一系列TrueFalse。例如,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