我有一个如下数据框:
KeyColumn Column2 Column3 Column4
pk1 abc def col4
pk2 col3 col1 col4
pk2 col4 col2 col4
pk4 col5 col4 col4
pk5 col6 col5 col4
pk6 col7 col6 col4
pk7 col8 col7 col4
pk8 col9 col8 col4
pk9 col10 col9 col4
pk10 col11 col3 col4
当我对其应用过滤器时,如下所示:
dataframe[(dataframe['Column2']=='abc') & (dataframe['Column3']=='def')]
我得到了预期的结果。但是,我已经应用的过滤器可以以字符串变量的形式与我一起使用。
例如:
filterParameters = "(dataframe['Column2']=='abc') & (dataframe['Column3']=='def')"
当我将变量作为过滤器传递到数据框
dataframe[filterParameters]
我得到了错误
KeyError:“(dataframe ['Column1'] =='abc')&(dataframe ['Column2'] =='def')”
请让我知道是否有人可以提供帮助。非常感谢。
答案 0 :(得分:0)
Pandas有一个eval
方法,您可以用来评估过滤器字符串,但是您必须确定要对所评估的内容进行消毒。在任何您自己没有构造的东西上使用eval
是有风险的。
import pandas as pd
dataframe = pd.DataFrame([['pk1','abc','def','col4'],
['pk2','col3','col1','col4'],
['pk2','col4','col2','col4'],
['pk4','col5','col4','col4'],
['pk5','col6','col5','col4'],
['pk6','col7','col6','col4'],
['pk7','col8','col7','col4'],
['pk8','col9','col8','col4'],
['pk9','col10','col9','col4'],
['pk10','col11','col3','col4']],
columns=['KeyColumn','Column2','Column3','Column4'])
filterParameters = "(dataframe['Column2']=='abc') & (dataframe['Column3']=='def')"
dataframe[pd.eval(filterParameters)]