pandas - python - 在字典中,访问Pandas掩码

我有一个包含几个pandas掩码的字典作为特定数据帧的字符串,但是,我找不到使用这些掩码的方法。

下面是一个简短的可重复例子:


df = pd.DataFrame({'age' : [10, 24, 35, 67], 'strength' : [0 , 3, 9, 4]})



masks = {'old_strong' :"(df['age'] >18) & (df['strength'] >5)",


 'young_weak' :"(df['age'] <18) & (df['strength'] <5)"}



我想实现一些类似这样的:


df[masks['young_weak']]



但由于掩码是一个字符串我得到错误


KeyError:"(df['age'] <18) & (df['strength] <5)"



时间:

不安全的解决方案,和非常糟糕的实践,但是解决它的唯一方法是使用eval


print(df[eval(masks['young_weak'])])



输出:


 age strength


0 10 0



DataFrame.query与已更改的字典一起使用:


masks = {'old_strong' :"(age >18) & (strength >5)",


 'young_weak' :"(age <18) & (strength <5)"}



print (df.query(masks['young_weak']))


 age strength


0 10 0



另一种方法是将掩码设置为函数(lambda表达式)而不是字符串,这个可以工作:


masks = {'old_strong' : lambda row: (row['age'] >18) & (row['strength'] >5),


 'young_weak' : lambda row: (row['age'] <18) & (row['strength'] <5)}


df[masks['young_weak']]




df = pd.DataFrame({'age' : [10, 24, 35, 67], 'strength' : [0 , 3, 9, 4]})



masks = {'old_strong' : (df['age'] >18) & (df['strength'] >5),


 'young_weak' : (df['age'] <18) & (df['strength'] <5)}



df[masks['young_weak']]



...