pandas 忽略无法使用.mask()满足条件的元素

92vpleto  于 2023-02-11  发布在  其他
关注(0)|答案(1)|浏览(110)

我有以下系列'

s = pd.Series([0,1,'random',2,3,4])

s2 = pd.Series([5,6,7,8,9,10])

如何使用s.mask返回一个序列,其中s中的每个偶数都被s2替换,并且s中不能根据条件求值的元素被忽略(例如'random')?
我试过这个,它给了一个ValueError: Array conditional must be same shape as self

def is_even_if_is_number(x):
    if isinstance(x, int):
        return x % 2 == 0
    return False        

s.mask(lambda x: is_even_if_is_number(x), s2)

我需要这个的输出

0         5
1         1
2    random
3         8
4         3
5        10
n6lpvg4x

n6lpvg4x1#

首先创建遮罩,然后传递到Series.mask

#even number 
m = (np.arange(len(s)) % 2 == 0) & pd.to_numeric(s, errors='coerce').notna()

#even integer
#m = (np.arange(len(s)) % 2 == 0) & s.apply(lambda x: isinstance(x, int))
out = s.mask(m, s2)
print (out)
0         5
1         1
2    random
3         2
4         9
5         4
dtype: object

相关问题