【发布时间】:2014-04-01 17:57:51
【问题描述】:
在风险级别列中,我想将 Small 替换为 1,将 Medium 替换为 5,将 High 替换为 15。 我试过了:
dfm.replace({'risk':{'Small': '1'}},
{'risk':{'Medium': '5'}},
{'risk':{'High': '15'}})
但只更换了介质。 怎么了?
【问题讨论】:
在风险级别列中,我想将 Small 替换为 1,将 Medium 替换为 5,将 High 替换为 15。 我试过了:
dfm.replace({'risk':{'Small': '1'}},
{'risk':{'Medium': '5'}},
{'risk':{'High': '15'}})
但只更换了介质。 怎么了?
【问题讨论】:
您的替换格式已关闭
In [21]: df = pd.DataFrame({'a':['Small', 'Medium', 'High']})
In [22]: df
Out[22]:
a
0 Small
1 Medium
2 High
[3 rows x 1 columns]
In [23]: df.replace({'a' : { 'Medium' : 2, 'Small' : 1, 'High' : 3 }})
Out[23]:
a
0 1
1 2
2 3
[3 rows x 1 columns]
【讨论】:
replace 格式行出了什么问题,所以我建议改用map。 +1 用于发现 OP 错误
In [123]: import pandas as pd
In [124]: state_df = pd.DataFrame({'state':['Small', 'Medium', 'High', 'Small', 'High']})
In [125]: state_df
Out[125]:
state
0 Small
1 Medium
2 High
3 Small
4 High
In [126]: replace_values = {'Small' : 1, 'Medium' : 2, 'High' : 3 }
In [127]: state_df = state_df.replace({"state": replace_values})
In [128]: state_df
Out[128]:
state
0 1
1 2
2 3
3 1
4 3
【讨论】:
你可以定义一个字典并调用map
In [256]:
df = pd.DataFrame({'a':['Small', 'Medium', 'High']})
df
Out[256]:
a
0 Small
1 Medium
2 High
[3 rows x 1 columns]
In [258]:
vals_to_replace = {'Small':'1', 'Medium':'5', 'High':'15'}
df['a'] = df['a'].map(vals_to_replace)
df
Out[258]:
a
0 1
1 5
2 15
[3 rows x 1 columns]
In [279]:
val1 = [1,5,15]
df['risk'].update(pd.Series(val1))
df
Out[279]:
risk
0 1
1 5
2 15
[3 rows x 1 columns]
【讨论】:
看起来 OP 可能一直在寻找一个单行代码来通过连续调用 .str.replace 来解决这个问题:
dfm.column = dfm.column.str.replace('Small', '1') \
.str.replace('Medium', '5') \
.str.replace('High', '15')
OP,您很接近,但只需将逗号替换为 .str.replace,并且不需要字典格式的列调用 ('risk')。只需将要匹配的模式和替换值作为参数传递给替换。
【讨论】:
我必须打开“正则表达式”标志才能使其工作:
df.replace({'a' : {'Medium':2, 'Small':1, 'High':3 }}, regex=True)
【讨论】:
字符串替换每个字符串(小、中、高)为新字符串 (1,5,15)\
如果 dfm 是数据框名,则 column 是列名。
dfm.column = dfm.column.str.replace('Small', '1')
dfm.column = dfm.column.str.replace('Medium', '5')
dfm.column = dfm.column.str.replace('High', '15')
【讨论】: