用 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 中的部分字符串