用 Pandas 中的一个字符串替换一个字符串

Posted

技术标签:

【中文标题】用 Pandas 中的一个字符串替换一个字符串【英文标题】:Replace a string with a string out of many in Pandas 【发布时间】:2021-10-27 22:36:43 【问题描述】:

所以,我有一个 pandas 数据框,其中一列包含用户国籍的描述,我想将整个描述替换为他来自的国家/地区。

我的输入是 df 和国家/地区列表:

Description ID
I am from Atlantis 1
My family comes from Narnia 2
["narnia","uzbekistan","Atlantis",...]

我知道:

    每个描述我只有一个国家 描述中包含或不包含国家名称,没有必要根据他所说的推断国家,我只想将[包含国家名称的短语]映射到[国家]。

如果我只有一个国家可以替换,我可以使用类似的东西

df.loc[df['description'].str.contains('Atlantis', case=False), 'description'] = 'Atlantis'

我知道,因为国家/地区名称被组织在一个列表中,我可以循环浏览它并将其应用于所有元素,例如:

for country in country_list:
  df.loc[df['description'].str.contains(country, case=False), 'description'] = country

但在我看来这很 unpythonic 所以我想知道是否有人可以帮助我找到更好的方法(我确定存在)

输出应该是:

Description ID
Atlantis 1
Narnia 2

【问题讨论】:

你能分享输入样本数据和预期输出吗? 使用str.extract 代替'|'.join(country_list) 模式。 @IbraheemAyoup 已添加,抱歉,我在写问题时忘记了。 @HenryYik 你的意思是 pandas.series.str.extract 方法吗?它不使用正则表达式吗?你能把它传递一个字符串吗,如果你能给出一个更完整和更清晰的答案,我将非常感激:) 【参考方案1】:

你可以使用pd.Series.str.extract:

country_list = ["narnia","uzbekistan","Atlantis"]

df = pd.DataFrame('Description': 0: 'I am from Atlantis', 
                                   1: 'My family comes from Narnia', 
                   'ID': 0: 1, 1: 2)

print (df["Description"].str.extract(f"('|'.join(country_list))", flags=re.I))

          0
0  Atlantis
1    Narnia

【讨论】:

以上是关于用 Pandas 中的一个字符串替换一个字符串的主要内容,如果未能解决你的问题,请参考以下文章

用字典值替换 Pandas Dataframe 中的部分字符串

python pandas用数字替换数据框中的字符串

pandas 替换(擦除)字符串中的不同字符

用整数替换 pandas DataFrame 的字符串元素

字符串中的 Pyspark 双字符替换避免某些单词而不映射到 pandas 或 rdd

用正则表达式替换 Pandas 数据框中字符串的某个部分