如何检查Pandas列中字符串格式字典是否包含指定整数键
Pandas处理字符串格式字典列,生成指定键存在标记列
问题说明
现有如下Pandas DataFrame,其中qualifier列存储的是字符串格式的字典。需要检查5、6、107是否作为键存在于该列的字典中,并生成包含set_piece列的新DataFrame,该列标记对应行的字典是否存在任一指定键。
输入DataFrame
| player | qualifier |
|---|---|
| John | "{120: 'left', 107: True}" |
| Felix | "{1: 'box centre', 120: 5.6}" |
实现步骤
- 解析字符串为字典:使用
ast.literal_eval安全将字符串格式的字典转换为Python字典(避免eval的安全风险) - 定义目标键集合:指定需要检查的键
{5, 6, 107} - 生成标记列:通过自定义函数结合
apply,判断每行字典是否包含任一目标键,生成set_piece列
完整代码
import pandas as pd import ast # 构造输入DataFrame df = pd.DataFrame({ 'player': ['John', 'Felix'], 'qualifier': ["{120: 'left', 107: True}", "{1: 'box centre', 120: 5.6}"] }) # 定义目标键集合 target_keys = {5, 6, 107} # 解析字符串字典并判断是否存在目标键 def check_target_keys(qual_str): qual_dict = ast.literal_eval(qual_str) return any(key in qual_dict for key in target_keys) df['set_piece'] = df['qualifier'].apply(check_target_keys) # 查看结果 print(df)
目标输出DataFrame
| player | qualifier | set_piece |
|---|---|---|
| John | "{120: 'left', 107: True}" | True |
| Felix | "{1: 'box centre', 120: 5.6}" | False |
内容的提问来源于stack exchange,提问作者Christian Rønsholt
相关产品推荐
相关产品推荐

