用一个值替换 Pandas 系列中的多个子字符串

问题描述 投票:0回答:6

全部,

为了替换某一特定列中的一个字符串,我已经这样做了,并且效果很好:

dataUS['sec_type'].str.strip().str.replace("LOCAL","CORP")

我现在想用一个字符串替换多个字符串,例如将

["LOCAL", "FOREIGN", "HELLO"]
替换为
"CORP"

怎样才能让它发挥作用?下面的代码不起作用

dataUS['sec_type'].str.strip().str.replace(["LOCAL", "FOREIGN", "HELLO"], "CORP")
python string pandas python-2.7 series
6个回答
40
投票

您可以通过形成 | 分隔的字符串来执行此任务。这是有效的,因为

pd.Series.str.replace
接受正则表达式:

将系列/索引中出现的模式/正则表达式替换为一些 其他字符串。相当于 str.replace() 或 re.sub()。

这避免了创建字典的需要。

import pandas as pd

df = pd.DataFrame({'A': ['LOCAL TEST', 'TEST FOREIGN', 'ANOTHER HELLO', 'NOTHING']})

pattern = '|'.join(['LOCAL', 'FOREIGN', 'HELLO'])

df['A'] = df['A'].str.replace(pattern, 'CORP', regex=True)

#               A
# 0     CORP TEST
# 1     TEST CORP
# 2  ANOTHER CORP
# 3       NOTHING

14
投票

replace
可以接受
dict
,我们只需为那些需要替换的值创建一个字典

dataUS['sec_type'].str.strip().replace(dict(zip(["LOCAL", "FOREIGN", "HELLO"], ["CORP"]*3)),regex=True)

字典信息

dict(zip(["LOCAL", "FOREIGN", "HELLO"], ["CORP"]*3))
Out[585]: {'FOREIGN': 'CORP', 'HELLO': 'CORP', 'LOCAL': 'CORP'}

您收到错误的原因,

str.replacereplace

不同

12
投票

@Rakesh 的答案非常简洁,但不允许使用子字符串。然而,只要稍加改变,它就可以了。

  1. 使用替换字典,因为它使它更通用
  2. 将关键字参数
    regex=True
    添加到
    Series.replace()
    (不是
    Series.str.replace
    )这实际上做了两件事:它将您的替换更改为正则表达式替换,这更强大,但您必须转义特殊字符。小心这一点。其次,它将使替换工作在子字符串而不是整个字符串上。这真的很酷!
replacement = {
    "LOCAL": "CORP",
    "FOREIGN": "CORP",
    "HELLO": "CORP"
}

dataUS['sec_type'].replace(replacement, regex=True)

完整代码示例

dataUS = pd.DataFrame({'sec_type': ['LOCAL', 'Sample text LOCAL', 'Sample text LOCAL sample FOREIGN']})

replacement = {
    "LOCAL": "CORP",
    "FOREIGN": "CORP",
    "HELLO": "CORP"
}

dataUS['sec_type'].replace(replacement, regex=True)

输出

0                            CORP
1                            CORP
2                Sample text CORP
3    Sample text CORP sample CORP
Name: sec_type, dtype: object

5
投票

@JJP 如果你有一个很长的清单,答案是一个很好的答案。但如果你只有两个或三个,那么你可以简单地使用“|”图案内。确保添加

regex=True
参数。

显然

.str.strip()
不是一个要求,而是一个很好的实践。

import pandas as pd

df = pd.DataFrame({'A': ['LOCAL TEST', 'TEST FOREIGN', 'ANOTHER HELLO', 'NOTHING']})

df['A'] = df['A'].str.strip().str.replace("LOCAL|FOREIGN|HELLO", "CORP", regex=True)

输出

    A
0   CORP TEST
1   TEST CORP
2   ANOTHER CORP
3   NOTHING

2
投票

pandas系列中替换多个值的函数:

def replace_values(series, to_replace, value):
    for i in to_replace:
        series = series.str.replace(i, value)
    return series

希望这对某人有帮助


0
投票

尝试:

dataUS.replace({"sec_type": { 'LOCAL' : "CORP", 'FOREIGN' : "CORP"}})
© www.soinside.com 2019 - 2024. All rights reserved.