python - 如果 Pandas 数据框列中存在列表值列表,则将其替换为另一个 Pandas 列中的值
问题描述
我有一个包含以下类型单词标记的列表列表:
[['java_developer'],
['ETL', 'database_administrator'],
...
['web-developer', 'c#', 'ms_sql']]
我还有一个键值熊猫数据框,其中第一列键和第二个键是值。例如:
Key Value
0 java_developer java
1 web-developer web
2 database_administrator database
3 ETL ETL
4 ms_sql database
... ... ...
100 c# c#
我想收到以下类型的列表:
[['java'],
['ETL', 'database'],
...
['web', 'c#', 'database']]
如何实施?
解决方案
用于为get
以下缺失值添加一些值:DataFrame
None
#added val to last sublist for better sample
L = [['java_developer'],
['ETL', 'database_administrator'],
['web-developer', 'c#', 'ms_sql', 'val']]
#create dictionary from DataFrame
d = df.set_index('Key')['Value'].to_dict()
print (d)
{'java_developer': 'java', 'web-developer': 'web',
'database_administrator': 'database', 'ETL': 'ETL',
'ms_sql': 'database', 'c#': 'c#'}
#in nested list comprehension repalce by dict
L1 = [[d.get(y, None) for y in x] for x in L]
print (L1)
[['java'], ['ETL', 'database'], ['web', 'c#', 'database', None]]
或删除不匹配的值添加过滤:
L1 = [[d.get(y) for y in x if y in d] for x in L]
print (L1)
[['java'], ['ETL', 'database'], ['web', 'c#', 'database']]
如果需要字典中不存在的相同值:
L1 = [[d.get(y, y) for y in x] for x in L]
print (L1)
[['java'], ['ETL', 'database'], ['web', 'c#', 'database', 'val']]
推荐阅读
- java - 针对 MVC 模式规则的 JavaFX 代码优化
- kotlin - Room.databaseBuilder() 即使从 androidx.room.Room 导入后也找不到 Room 依赖项
- algorithm - 可逆短密码序列
- java - Android 我选择的图像旋转了
- gradle - 找不到参数的方法 compile() [com.jcraft:jsch:0.1.53]
- python - 用于食物的 Python 中的 NLP
- vue.js - VueJS-Router 在哈希模式下重复 URL 并且刷新时会在历史模式下提供空白页面
- google-cloud-platform - 我的“存储 PD 容量”费用从何而来?
- docker - Docker 容器不使用 json 中提供的服务帐户凭据
- javascript - 为什么 bootstrap-vue 不渲染 onclick?