DPd*_*Pdl 2 python dictionary replace dataframe pandas
df = pd.DataFrame({'Tissues':['a1','x2','y3','b','c1','v2','w3'], 'M':[1,2,'a',4,'b','a',7]})
df.set_index('Tissues')
Run Code Online (Sandbox Code Playgroud)
数据框看起来像:
M
Tissues
a1 1
x2 2
y3 a
b 4
c1 b
v2 a
w3 7
Run Code Online (Sandbox Code Playgroud)
如何将a列中的所有s替换M为特定值,2 以及所有bs 到 3?
我试过:
replace_values = {'a':2, 'b':3}
df['M'] = df['M'].map(replace_values)
Run Code Online (Sandbox Code Playgroud)
,但这将不在键中的其他值更改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
Run Code Online (Sandbox Code Playgroud)
我明白我可以做到
df.loc[(df['M'] == 'a')] = 2
Run Code Online (Sandbox Code Playgroud)
但是我可以对 a、b 等有效地执行此操作,而不是一个一个地执行此操作吗?
使用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)
Run Code Online (Sandbox Code Playgroud)
输出:
>>> df
Tissues M
0 a1 1
1 x2 2
2 y3 2
3 b 4
4 c1 3
5 v2 2
6 w3 7
Run Code Online (Sandbox Code Playgroud)