我有一种情况需要根据许多用户定义的标准从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()删除双引号但没有成功。
任何潜在的解决方案/解决方法?谢谢。
答案 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