替换pandas数据框中的特定列值

时间:2020-01-07 15:41:53

标签: python pandas dataframe dictionary replace

df = pd.DataFrame({'Tissues':['a1','x2','y3','b','c1','v2','w3'], 'M':[1,2,'a',4,'b','a',7]})
df.set_index('Tissues')

数据框如下:

         M
Tissues   
a1       1
x2       2
y3       a
b        4
c1       b
v2       a
w3       7

如何将a列中的所有M替换为特定值2,并将所有b替换为3?

我尝试过:

replace_values = {'a':2, 'b':3}
df['M'] = df['M'].map(replace_values)

,但是将其他值未从replace_values的键更改为NaN

  Tissues    M
0      a1  NaN
1      x2  NaN
2      y3  2.0
3       b  NaN
4      c1  3.0
5      v2  2.0
6      w3  NaN

我知道我可以做到

df.loc[(df['M'] == 'a')] = 2

但是我可以有效地对a,b等进行此操作,而不是一个接一个地进行吗?

3 个答案:

答案 0 :(得分:4)

使用df.replace

df = pd.DataFrame({'Tissues':['a1','x2','y3','b','c1','v2','w3'], 'M':[1,2,'a',4,'b','a',7]})
df.set_index('Tissues')

replace_values = {'a':2, 'b':3}

df['M'] = df['M'].replace(replace_values)

输出:

>>> df
  Tissues  M
0      a1  1
1      x2  2
2      y3  2
3       b  4
4      c1  3
5      v2  2
6      w3  7

答案 1 :(得分:3)

通过添加fillna

修改代码
df['M'] = df['M'].map(replace_values).fillna(df.M)
df
  Tissues    M
0      a1  1.0
1      x2  2.0
2      y3  2.0
3       b  4.0
4      c1  3.0
5      v2  2.0
6      w3  7.0

答案 2 :(得分:2)

使用docker image error: standard_init_linux.go:211: exec user process caused “exec format error”

df.replace

结果:

replace_values = {'a':2, 'b':3}
df = df.replace({"M": replace_values})