python - 检查列表中的一个单词并创建一个新变量
问题描述
我想使用列表中的城市列表获取 obras desc 内部的位置。
我有以下数据框
obras = pd.DataFrame([['1','Agua de Buenos Aires'],['2', 'Sistenas de carreteras Jujuy'],['3','Reasentamiento en Entre Ríos'], ['4','Rutas en Córdoba']],
columns = ['id', 'desc'])
和名单
list = ['Buenos Aires', 'Jujuy', Corrientes', 'Entre Ríos']
我试着这样做
for s in obras["desc"]:if any(xs in s for xs in list):obras['Localidad'] = s
预期的结果是:
ID | 描述 | 本地化 |
---|---|---|
1 | 阿瓜德布宜诺斯艾利斯 | 布宜诺斯艾利斯 |
2 | 西斯泰纳斯·德·卡雷特拉斯 | 胡胡伊 |
3 | Reasentamiento en Entre Ríos | 恩特雷里奥斯 |
4 | Rutas en Córdoba | 钠 |
但我得到的结果是:
ID | 描述 | 本地化 |
---|---|---|
1 | 阿瓜德布宜诺斯艾利斯 | Reasentamiento en Entre Ríos |
2 | 西斯泰纳斯·德·卡雷特拉斯 | Reasentamiento en Entre Ríos |
3 | Reasentamiento en Entre Ríos | Reasentamiento en Entre Ríos |
4 | Rutas en Córdoba | Reasentamiento en Entre Ríos |
我该如何解决这个问题?
谢谢!!!
解决方案
您可以使用以下方法检查字符串中是否存在列表项apply
:
import pandas as pd
obras = pd.DataFrame([['1','Agua de Buenos Aires'],['2', 'Sistenas de carreteras Jujuy'],['3','Reasentamiento en Entre Ríos'], ['4','Rutas en Córdoba']],columns = ['id', 'desc'])
list_ = ['Buenos Aires', 'Jujuy', 'Corrientes', 'Entre Ríos']
obras['localidad'] = obras['desc'].apply(lambda x: next(iter([i for i in list_ if i in x]), None))
请注意 - 给定所需的输出 - 这仅在多个匹配的情况下返回第一个匹配。
ID | 描述 | 本地化 | |
---|---|---|---|
0 | 1 | 阿瓜德布宜诺斯艾利斯 | 布宜诺斯艾利斯 |
1 | 2 | 西斯泰纳斯·德·卡雷特拉斯·胡胡伊 | 胡胡伊 |
2 | 3 | Reasentamiento en Entre Ríos | 恩特雷里奥斯 |
3 | 4 | Rutas en Córdoba |
PS。不要list
用作变量名,因为它也是一个内置的 python 函数。
推荐阅读
- elixir - 在 Elixir 中不使用科学形式删除十进制尾随零
- python - 将 Pandas 中保存的 HTML 文件导入为 DataFrame 而不是 dict
- python - 在笔记本之间移动数据框
- tensorflow-lite - 如何对视频输入进行 TFLite 模型推理
- .htaccess - .htaccess 文件。使用 SSL 证书和 cloudflare 时重定向到子域的次数过多?
- c# - 在问答游戏中设置关卡
- xamarin.forms - xamarin 表单中的可拖动图标或图像按钮
- c - 我应该把 free() 放在 C 哪里?
- web-services - 500 Web 服务请求中的内部服务器错误错误
- sqlite - Flutter 中的 CupertinoDatePicker 到 SQLite