Python,Pandas,使用多个条件进行选择:从字符串

时间:2017-05-12 17:18:42

标签: python pandas

我有一种情况需要根据许多用户定义的标准从Pandas数据帧中提取数据。选择过程中使用的列数可能很大,因此我考虑创建选择标准,如下面的最小示例所示:

import pandas as pd
import numpy as np
np.random.seed(10)

df = pd.DataFrame(np.random.randn(5,3), columns=['a','b','c'])

query_list = []
query_string = ""  

mina = -1
minb = 2
minc = 0

query_list.append("df['a']>="+str(mina))
query_list.append("df['b']<="+str(minb))
query_list.append("df['c']<="+str(minc))

for i,q in enumerate(query_list):
    if i < len(query_list)-1:
        query_string += "("+q+")"+" & "
    else:
        query_string += "("+q+")"

print query_string

df2 = df[query_string]

创建df2的尝试因密钥错误而失败:

KeyError: "(df['a']>=-1.0) & (df['b']<=2.0) & (df['c']<=0.0)" 

双引号似乎是问题,如:

df2 = df[(df['a']>=-1.0) & (df['b']<=2.0) & (df['c']<=0.0)]

产生所需的结果:

         a         b         c
0  1.331587  0.715279 -1.545400
1 -0.008384  0.621336 -0.720086

我尝试使用.strip()以及.lstrip()和.rstrip()删除双引号但没有成功。

任何潜在的解决方案/解决方法?谢谢。

1 个答案:

答案 0 :(得分:1)

cmapdb.py

df

          a         b         c
0 -1.073122 -1.724574  1.476586
1  0.276805  0.007654  3.416143
2  0.054306  0.189781 -0.593007
3  1.004210  0.098396  1.488482
4  0.755500 -0.413743  0.610476

然后

mina = -1
minb = 2
minc = 0

更动态构建

df.query('a >= @mina and b <= @minb and c <= @minc')

          a         b         c
2  0.054306  0.189781 -0.593007