Python中是否有类似于R中的ifelse
语句?我有一个长度为64843的pandas.core.series.Seriesds
,需要对该系列中的每个数据点取对数。该系列中的某些值为0。在R中,我可以编写以下代码:
ifelse(ds==0,0,log(z))
但在Python中,我没有看到类似的语句。你能指导我吗?
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
我认为在你的情况下,先填充0
,然后再调用log
会更容易:
ds[ds == 0] = 1
ds = np.log(ds)
当你的系列中有0到1之间的值时要小心,这些值会映射为-Inf
和0,所以你的比例尺将不再连续。
可能
ds[0 if ds == 0 else math.log(ds)]