熊猫在一列中替换多个值
Posted
技术标签:
【中文标题】熊猫在一列中替换多个值【英文标题】:pandas replace multiple values one column 【发布时间】:2014-04-01 17:57:51 【问题描述】:在风险级别列中,我想将 Small 替换为 1,将 Medium 替换为 5,将 High 替换为 15。 我试过了:
dfm.replace('risk':'Small': '1',
'risk':'Medium': '5',
'risk':'High': '15')
但只更换了介质。 怎么了?
【问题讨论】:
【参考方案1】:您的替换格式已关闭
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 错误【参考方案2】:
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
【讨论】:
【参考方案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]
【讨论】:
@Jeff 不熟悉那个方法,我用对了吗? 是的,这是正确的(但我意识到问题是 OP 替换格式错误)【参考方案4】:看起来 OP 可能一直在寻找一个单行代码来通过连续调用 .str.replace
来解决这个问题:
dfm.column = dfm.column.str.replace('Small', '1') \
.str.replace('Medium', '5') \
.str.replace('High', '15')
OP,您很接近,但只需将逗号替换为 .str.replace
,并且不需要字典格式的列调用 ('risk')。只需将要匹配的模式和替换值作为参数传递给替换。
【讨论】:
欢迎来到 Stack Overflow。请问您能否为您的答案添加一些解释? (您做了哪些更改,为什么?为什么 OP 的原始代码不起作用?)如果没有解释,答案对未来的访问者就没那么有用了。 这个答案增加了其他答案所缺乏的什么? 如果你想替换一段字符串而不是整个字符串,这个答案很有用。当我试图了解是否可以将多个 .str.replace 放在一个语句中时,我找到了这个答案。也就是说,如果需要匹配整个字符串(OP 问题),而不是字符串的一部分,则首选答案是最好的。【参考方案5】:我必须打开“正则表达式”标志才能使其工作:
df.replace('a' : 'Medium':2, 'Small':1, 'High':3 , regex=True)
【讨论】:
【参考方案6】:字符串替换每个字符串(小、中、高)为新字符串 (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')
【讨论】:
以上是关于熊猫在一列中替换多个值的主要内容,如果未能解决你的问题,请参考以下文章