【发布时间】: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 方法吗?它不使用正则表达式吗?你能把它传递一个字符串吗,如果你能给出一个更完整和更清晰的答案,我将非常感激:)
标签: python pandas dataframe mapping