如何使用pandas替换列中的元素

Hap*_*yPy 4 python replace pandas

鉴于此数据框架:

>>> a = pd.DataFrame(data={'words':['w1','w2','w3','w4','w5'],'value':np.random.rand(5)})
>>> a

     value   words
0  0.157876    w1
1  0.784586    w2
2  0.875567    w3
3  0.649377    w4
4  0.852453    w5

>>> b = pd.Series(data=['w3','w4'])
>>> b

0    w3
1    w4
Run Code Online (Sandbox Code Playgroud)

我想替换valuewith 的元素,zero但仅用于匹配中的元素b.因此,结果数据框应如下所示:

    value    words
0  0.157876    w1
1  0.784586    w2
2  0           w3
3  0           w4
4  0.852453    w5
Run Code Online (Sandbox Code Playgroud)

我想到了这些方面的东西:a.value[a.words==b] = 0但这显然是错的.

Rom*_*kar 5

你很接近,只需使用pandas.Series.isin()而不是==:

>>> a.value[a['words'].isin(b)] = 0
>>> a
      value words
0  0.340138    w1
1  0.533770    w2
2  0.000000    w3
3  0.000000    w4
4  0.002314    w5
Run Code Online (Sandbox Code Playgroud)

或者您可以使用ix选择器:

>>> a.ix[a['words'].isin(b), 'value'] = 0
>>> a
      value words
0  0.340138    w1
1  0.533770    w2
2  0.000000    w3
3  0.000000    w4
4  0.002314    w5
Run Code Online (Sandbox Code Playgroud)

更新已可以看到文档有关betweed差异.ix.loc,一些报价:

.loc是严格基于标签的,当找不到项目时会引发KeyError ...

.iloc是严格基于整数位置的(从轴的0到长度-1),当请求的指标超出范围时会引发IndexError ...

.ix支持基于混合整数和标签的访问.它主要基于标签,但将回退到整数位置访问..ix是最通用的,它将支持.loc和.iloc的任何输入,以及对浮点标签方案的支持..ix在处理基于混合位置和标签的层次索引时特别有用......