python - 有没有过滤到数据框的方法?
问题描述
我有一个像这样的数据框:
id ; dic
AZE21 ; {"Sport20" : 3 , "Football12":5, "Handball43":19,"Tennis98":32}
BA433 ; {"voiture23": 5 , "BMW32" : 19 , "Vélo81":10}
PA234 ; {"TV98": 12 , "Ordinateur83": 19 }
我有一个类似 ["Sport","TV","Tennis"] 的列表。所以我想从“dic”的每一行中删除这个列表中的术语。例如对于这一行:
AZE21 ; {"Sport20" : 3 , "Football12":5, "Handball43":19,"Tennis98":32}
我们要删除 "Sport20" , "Tennis98" 因为列表中的 "Sport" 和 "Tennis" ....
我想要一个像这样的输出:
id ; dic
AZE21 ; { "Football12":5, "Handball43":19}
BA433 ; {"voiture23": 5 , "BMW32" : 19 , "Vélo81":10}
PA234 ; { "Ordinateur83": 19 }
代码位:
import pandas as pd
import numpy as np
lst1 = ["AZE21","BA433","PA234"]
lst2 = [{"Sport20" : 3 , "Football12":5, "Handball43":19,"Tennis98":32},{"voiture23": 5 , "BMW32" : 19 , "Vélo81":10},{"TV98": 12 , "Ordinateur83": 19 } ]
df = pd.DataFrame(list(zip(lst1,lst2)), columns = ['id','dic'])
解决方案
与自定义函数一起使用Series.map()
,如下所示:
lst_target = ["Sport","TV","Tennis"]
def match_partial_key(dic):
dic_keys = list(dic.keys())
for key in dic_keys:
for l in lst_target:
if key.startswith(l):
dic.pop(key)
return dic
df['dic'] = df['dic'].map(match_partial_key)
print(df)
id dic
0 AZE21 {'Football12': 5, 'Handball43': 19}
1 BA433 {'voiture23': 5, 'BMW32': 19, 'Vélo81': 10}
2 PA234 {'Ordinateur83': 19}
推荐阅读
- python - 接缝插入坐标 - 接缝雕刻
- postgresql - 是否有解决方法来确保在 jsondoc->>'....' 相等查询上仅扫描索引?
- c - 如何在函数中创建二维数组
- regex - .htaccess 正则表达式不会过滤 .php 或没有文件扩展名
- swift - Set 的 contains 方法在不同的时间返回不同的值
- ruby - 使用 chef-run 安装特定的 Ruby 版本
- mongodb - MongoDB:批量更改python中的所有字段类型
- java - 从用户那里获取输入并打印数字的递减模式
- java - 如何将计时器指标添加到 java.util.Stream
- c++ - 用于集成 Visual Studio 单元测试的 CMake 文件