假设我创建了一个包含列和查询的数据框,即
pd.DataFrame([[1,2],[3,4],[5,6]],columns=['a','b']).query('a>1')
这会给我
a b
1 3 4
2 5 6
但是当数据帧值太大而我没有列名时,如何通过索引查询列?
我尝试通过传递一个数字来查询,但这不是这样做的方式。
pd.DataFrame([[1,2],[3,4],[5,6]]).query('0>1') # This is what I tried.
如何表示0
是查询中的列名?
预期产出:
0 1
1 3 4
2 5 6
答案 0 :(得分:3)
由于查询正在开发中,一种可能的解决方案是为pd.DataFrame
创建一个猴子补丁以评估自己:
def query_cols(self,expr):
if 'self' in expr:
return self[eval(expr)]
else:
return self.query(expr)
pd.DataFrame.query_cols = query_cols
pd.DataFrame([[1,2],[3,4],[5,6]]).query_cols('self[1] > 3')
0 1
1 3 4
2 5 6
pd.DataFrame([[1,2],[3,4],[5,6]]).query_cols('self[1] == 4')
0 1
1 3 4
pd.DataFrame([[1,2],[3,4],[5,6]],columns=['a','b']).query_cols('a > 3')
a b
2 5 6
这是一个简单的技巧,并不适合所有情况,当解决查询问题时,答案将会更新。
答案 1 :(得分:0)
没有任何猴子补丁的一个选项是使用 @
来定义一个变量,并按如下方式执行此操作。
# If you are fond of one-liners
df = pd.DataFrame([[1,2],[3,4],[5,6]]); df.query('@df[0] > 1')
# Otherwise this is the same as
df = pd.DataFrame([[1,2],[3,4],[5,6]])
df.query('@df[0] > 1') # @df refers to the variable df
输出:
0 1
1 3 4
2 5 6
您可以找到更多处理此 here 的方法。