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等进行此操作,而不是一个接一个地进行吗?
答案 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})