将以字符串格式存储的过滤器应用于熊猫数据框

时间:2018-07-12 11:21:51

标签: python pandas dataframe

我有一个如下数据框:

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')”

请让我知道是否有人可以提供帮助。非常感谢。

1 个答案:

答案 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)]