Python中类似于R的ifelse语句

4

Python中是否有类似于R中的ifelse语句?我有一个长度为64843的pandas.core.series.Seriesds,需要对该系列中的每个数据点取对数。该系列中的某些值为0。在R中,我可以编写以下代码:

ifelse(ds==0,0,log(z))

但在Python中,我没有看到类似的语句。你能指导我吗?


1
可能是Python是否有三元条件运算符?的重复问题。 - Christian König
1
在Python中有elif语句,我认为这就是你所要问的等价物吗? - Alex Tănăsescu
3个回答

3
我相信您通常需要使用numpy.where,但是对于log,可以在numpy.log中添加where参数。

这些函数返回numpy 1d数组,因此需要使用新的Series构造函数:

s = pd.Series([0,1,5])

s1 = pd.Series(np.log(s,where=s>0), index=s.index)

或者:

s1 = pd.Series(np.where(s==0,0,np.log(s)), index=s.index)
print (s1)
0    0.000000
1    0.000000
2    1.609438
dtype: float64

1

我认为在你的情况下,先填充0,然后再调用log会更容易:

ds[ds == 0] = 1
ds = np.log(ds)

当你的系列中有0到1之间的值时要小心,这些值会映射为-Inf和0,所以你的比例尺将不再连续。


-1

可能

ds[0 if ds == 0 else math.log(ds)]

来自评论:您能否在您的回答中添加更多细节? - toti08

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接