熊猫在一列中替换多个值

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')

【讨论】:

以上是关于熊猫在一列中替换多个值的主要内容,如果未能解决你的问题,请参考以下文章

检查一个大文件 .csv 并替换,并将其分类在一列中

如何用同一数据框中其他列的实际列值替换一列中的字符串值?

用另一个值替换熊猫数据框列中的几个值

如何用熊猫数据框中的范围替换列值

使用熊猫替换列中的值时出错[重复]

在熊猫数据框列中查找非数字值