如何使用Pandas删除DataFrame字典列中的指定键值对?
Pandas删除DataFrame字典列指定键值对
问题场景
现有包含time和dic两列的DataFrame,其中dic列的每个元素都是字典,需要删除字典中的'1:00'和'4:00'键值对。原始数据及初始化代码如下:
import pandas as pd dic={'time':[1685660515,1685689306], 'dic':[{"0:00":"2", "1:00":"1","2:00":"0","4:00":"0"}, {"0:00": "0", "1:00": "0", "2:00":"3","4:00":"0" }]} df= pd.DataFrame(dic)
原始DataFrame:
| time | dic |
|---|---|
| 1685660515 | {"0:00": "2", "1:00": "1", "2:00": "0","4:00":"0"} |
| 1685689306 | {"0:00": "0", "1:00": "0", "2:00":"3","4:00":"0"} |
解决方案
方法1:字典推导式结合apply
这是最直观的方法,通过lambda函数遍历每个字典,过滤掉不需要的键:
# 定义需要删除的键集合 keys_to_remove = {'1:00', '4:00'} # 处理dic列 df['dic'] = df['dic'].apply(lambda x: {k: v for k, v in x.items() if k not in keys_to_remove})
方法2:使用pop安全删除键
如果希望直接修改原字典(而非生成新字典),可以用dict.pop(),通过默认值避免键不存在时报错:
def clean_dictionary(d): for key in keys_to_remove: d.pop(key, None) # None表示键不存在时不抛出异常 return d df['dic'] = df['dic'].apply(clean_dictionary)
方法3:高效处理大数据量(可选)
当DataFrame行数较多时,map的性能略优于apply,用法类似:
df['dic'] = df['dic'].map(lambda x: {k: v for k, v in x.items() if k not in keys_to_remove})
处理后结果
执行上述任意方法后,df的dic列将只保留指定键:
| time | dic |
|---|---|
| 1685660515 | {"0:00": "2", "2:00": "0"} |
| 1685689306 | {"0:00": "0", "2:00": "3"} |
内容的提问来源于stack exchange,提问作者zircon
相关产品推荐
相关产品推荐

