我有这个数据框:
TIMESTAMP equipmeent1 equipement2 class_energy
2016-05-10 04:30:00 107 0 high
2016-05-10 04:40:00 100 90 medium
2016-05-10 04:50:00 106 0 low
2016-05-10 05:00:00 107 0 high
我尝试选择具有特殊条件的行:
x.loc[x['class_energy'] == 'high', x['TIMESTAMP'] > 2016-05-10 04:30:00 04:10:00,x['TIMESTAMP'] < 2016-05-10 05:00:00 ]
但是我遇到了这个问题:
getitem 中的IndexingError Traceback (most recent call last) <ipython-input-241-b47c8396bb9a> in <module>() ----> 1 x.loc[x['class_energy'] == 'high', x['PERIODE_TARIF'] =='HP'] C:\Users\Demonstrator\Anaconda3\lib\site-packages\pandas\core\indexing.py
(自我,密钥) 1292 1293如果type(key)是元组: - &GT; 1294返回self._getitem_tuple(键) 1295其他: 1296返回self._getitem_axis(key,axis = 0)
_getitem_tuple中的C:\Users\Demonstrator\Anaconda3\lib\site-packages\pandas\core\indexing.py
(self,tup) 802继续 803 - &GT; 804 retval = getattr(retval,self.name)._ getitem_axis(key,axis = i) 805 806返回retval
_getitem_axis中的C:\Users\Demonstrator\Anaconda3\lib\site-packages\pandas\core\indexing.py
(self,key,axis) 1437返回self._get_slice_axis(键,轴=轴) 1438 elif is_bool_indexer(关键): - &GT; 1439返回self._getbool_axis(键,轴=轴) 1440 elif is_list_like_indexer(key): 1441
_getbool_axis中的C:\Users\Demonstrator\Anaconda3\lib\site-packages\pandas\core\indexing.py
(self,key,axis) 1301 def _getbool_axis(self,key,axis = 0): 1302 labels = self.obj._get_axis(axis) - &GT; 1303 key = check_bool_indexer(标签,键) 1304 inds,= key.nonzero() 1305试试:
C:\Users\Demonstrator\Anaconda3\lib\site-packages\pandas\core\indexing.py
在check_bool_indexer中(ax,key) 1799 mask = com.isnull(result._values) 1800 if mask.any(): - &GT; 1801引发IndexingError(&#39;提供不可对齐的布尔系列键&#39;) 1802 1803 result = result.astype(bool)._ values
IndexingError: Unalignable boolean Series key provided
答案 0 :(得分:2)
您需要使用&
并使用括号:
x.loc[(x['class_energy'] == 'high') & (x['TIMESTAMP'] > '2016-05-10 04:30:00') & (x['TIMESTAMP'] < '2016-05-10 05:00:00') ]
目前还不清楚您在原始代码中随机包含04:10:00
的意图
您必须使用&
代替and
,因为我们正在比较值数组,由于运算符优先级,条件也需要括在括号中
你所做的只是将每个条件与,
分开,这在这里没有意义,并且因为它将你的args视为元组而导致评估错误
如果您想使用以下两个条件,那么您的错误x.loc[x['class_energy'] == 'high', x['PERIODE_TARIF'] =='HP']
与您发布的代码不符:
x.loc[(x['class_energy'] == 'high') & (x['PERIODE_TARIF'] =='HP')]
应该有效