Python 什么';关键字';列';在查询方法中?
我刚刚发现在查询方法中解析了关键字Python 什么';关键字';列';在查询方法中?,python,pandas,Python,Pandas,我刚刚发现在查询方法中解析了关键字列,但正确的使用方法是什么?我没有在报告中找到解释 DataFrame.query相当于第一次调用DataFrame.eval,然后使用求值结果对原始数据帧进行索引 In [9]: idx = df.eval('columns >= 1') In [10]: idx Out[10]: 0 False 1 True 2 True dtype: bool In [11]: df.loc[idx] Out[11]: 0 1 2
列
,但正确的使用方法是什么?我没有在报告中找到解释
DataFrame.query
相当于第一次调用DataFrame.eval
,然后使用求值结果对原始数据帧进行索引
In [9]: idx = df.eval('columns >= 1')
In [10]: idx
Out[10]:
0 False
1 True
2 True
dtype: bool
In [11]: df.loc[idx]
Out[11]:
0 1 2
1 3 4 5
In [13]: idx2 = df2.eval('columns >= 1')
In [14]: idx2
Out[14]:
a True
b True
c True
dtype: bool
这里的'columns'
相当于df.columns
,eval
的结果是一个序列,其索引是df.columns
,因此在命名列时,eval
的结果不能用作原始数据帧的索引
In [9]: idx = df.eval('columns >= 1')
In [10]: idx
Out[10]:
0 False
1 True
2 True
dtype: bool
In [11]: df.loc[idx]
Out[11]:
0 1 2
1 3 4 5
In [13]: idx2 = df2.eval('columns >= 1')
In [14]: idx2
Out[14]:
a True
b True
c True
dtype: bool
实际上,像这样在查询
表达式中使用'columns'
是不好的。在第一个示例中,恰好返回的序列可以用作索引,但它可能不适用于一般情况
例如,数据框形状的简单更改将导致错误
In [15]: df3 = pd.DataFrame(np.arange(6).reshape(3,2))
In [16]: df3.query('columns >= 1')
---------------------------------------------------------------------------
IndexingError Traceback (most recent call last)
<ipython-input-26-75248672c992> in <module>()
1 df = pd.DataFrame(np.arange(6).reshape(3,2))
----> 2 df.query('columns >= 1')
/home/ubuntu/anaconda/lib/python2.7/site-packages/pandas/core/frame.pyc in query(self, expr, **kwargs)
1936
1937 try:
-> 1938 return self.loc[res]
1939 except ValueError:
1940 # when res is multi-dimensional loc raises, but this is sometimes a
/home/ubuntu/anaconda/lib/python2.7/site-packages/pandas/core/indexing.pyc in __getitem__(self, key)
1187 return self._getitem_tuple(key)
1188 else:
-> 1189 return self._getitem_axis(key, axis=0)
1190
1191 def _getitem_axis(self, key, axis=0):
/home/ubuntu/anaconda/lib/python2.7/site-packages/pandas/core/indexing.pyc in _getitem_axis(self, key, axis)
1304 return self._get_slice_axis(key, axis=axis)
1305 elif is_bool_indexer(key):
-> 1306 return self._getbool_axis(key, axis=axis)
1307 elif is_list_like_indexer(key):
1308
/home/ubuntu/anaconda/lib/python2.7/site-packages/pandas/core/indexing.pyc in _getbool_axis(self, key, axis)
1194 def _getbool_axis(self, key, axis=0):
1195 labels = self.obj._get_axis(axis)
-> 1196 key = check_bool_indexer(labels, key)
1197 inds, = key.nonzero()
1198 try:
/home/ubuntu/anaconda/lib/python2.7/site-packages/pandas/core/indexing.pyc in check_bool_indexer(ax, key)
1657 mask = com.isnull(result.values)
1658 if mask.any():
-> 1659 raise IndexingError('Unalignable boolean Series key provided')
1660
1661 result = result.astype(bool).values
IndexingError: Unalignable boolean Series key provided
[15]中的df3=pd.DataFrame(np.arange(6).重塑(3,2))
在[16]中:df3.query('columns>=1')
---------------------------------------------------------------------------
IndexingError回溯(最近一次调用上次)
在()
1 df=pd.数据帧(np.arange(6).重塑(3,2))
---->2 df.query('columns>=1')
/查询中的home/ubuntu/anaconda/lib/python2.7/site-packages/pandas/core/frame.pyc(self,expr,**kwargs)
1936
1937尝试:
->1938返回自我位置[res]
1939除值错误外:
1940年#当res是多维时,loc升高,但有时这是一个
/home/ubuntu/anaconda/lib/python2.7/site-packages/pandas/core/index.pyc in____getitem____(self,key)
1187返回self.\u getitem\u元组(键)
1188其他:
->1189返回自我。\u获取项目\u轴(键,轴=0)
1190
1191定义获取项目轴(自身、键、轴=0):
/home/ubuntu/anaconda/lib/python2.7/site-packages/pandas/core/index.pyc in_getitem_axis(self、key、axis)
1304返回自我。获取切片轴(键,轴=轴)
1305 elif is_bool_索引器(键):
->1306返回自身轴(键,轴=轴)
1307 elif是类似列表的索引器(键):
1308
/home/ubuntu/anaconda/lib/python2.7/site-packages/pandas/core/index.pyc in_getbool_axis(self,key,axis)
1194 def_getbool_轴(自、键、轴=0):
1195标签=self.obj.\u get\u轴(轴)
->1196键=检查布尔索引器(标签,键)
1197 inds,=key.nonzero()
1198尝试:
/home/ubuntu/anaconda/lib/python2.7/site-packages/pandas/core/index.pyc in check\u bool\u indexer(ax,key)
1657 mask=com.isnull(result.values)
1658如果掩码为.any():
->1659 raise IndexingError('提供了不可对齐的布尔系列键')
1660
1661 result=result.astype(bool).values
IndexingError:提供了不可对齐的布尔系列键
标准语法(带命名列)类似于df2.query('a>1')