python中的ifelse语句类似于R

时间:2018-11-26 07:53:50

标签: python pandas

Python中是否有类似于R的ifelse语句?我有一个pandas.core.series.Series ds,长度为64843。我需要记录该系列的每个数据点。序列中的一些值为0。在R中,我可以写

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

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

3 个答案:

答案 0 :(得分:2)

我相信您通常需要numpy.where,但是对于log,可以将参数where添加到numpy.log

此函数返回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)

我认为,在您的情况下,先填写0并随后致电log会更容易:

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

当系列中的值介于0和1之间时,请注意,这些值将映射到-Inf和0之间,因此您的标度将不再连续。

答案 2 :(得分:-1)

也许

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