【问题标题】:selection rows with special conditions具有特殊条件的选择行
【发布时间】:2016-09-08 15:27:14
【问题描述】:

我有这个数据框:

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 ]

但我遇到了这个问题:

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

in getitem(自我,钥匙) 1292 1293 如果类型(键)是元组: -> 1294 返回 self._getitem_tuple(key) 1295 其他: 第1296章

C:\Users\Demonstrator\Anaconda3\lib\site-packages\pandas\core\indexing.py

在 _getitem_tuple(self, tup) 802 继续 803 --> 804 retval = getattr(retval, self.name)._getitem_axis(key, axis=i) 805 806 返回返回值

C:\Users\Demonstrator\Anaconda3\lib\site-packages\pandas\core\indexing.py

在 _getitem_axis(self, key, axis) 第1437章 第1438章 -> 1439 返回 self._getbool_axis(key,axis=axis) 第1440章 第1441章

C:\Users\Demonstrator\Anaconda3\lib\site-packages\pandas\core\indexing.py

in _getbool_axis(self, key, axis) 第1301章 1302 标签 = self.obj._get_axis(轴) -> 1303 键 = check_bool_indexer(标签,键) 1304 索引,= key.nonzero() 1305尝试:

C:\Users\Demonstrator\Anaconda3\lib\site-packages\pandas\core\indexing.py

在 check_bool_indexer(ax, key) 第1799章 1800 如果 mask.any(): -> 1801 raise IndexingError('Unalignable boolean Series key provided') 1802 1803 结果=result.astype(bool)._values

IndexingError: Unalignable boolean Series key provided

【问题讨论】:

    标签: python pandas


    【解决方案1】:

    你需要和条件使用&amp;并使用括号:

    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 不清楚您的意图

    您必须使用&amp; 而不是and,因为我们正在比较值数组,由于运算符优先级,条件也需要用括号括起来

    您所做的只是用 , 分隔每个条件,这在这里毫无意义并导致评估错误,因为它将您的 args 视为元组

    如果您想使用这两个条件,您的错误 x.loc[x['class_energy'] == 'high', x['PERIODE_TARIF'] =='HP'] 也与您发布的代码不匹配:

    x.loc[(x['class_energy'] == 'high') & (x['PERIODE_TARIF'] =='HP')]
    

    应该工作

    【讨论】:

    • 谢谢 EdChurn,它表示 SyntaxError: invalid token 。备注TIMESTAMP的类型为11232 non-null datetime64[ns]
    • 抱歉,您需要将日期时间用引号括起来,请尝试更新后的答案
    • 谢谢 EdChurn,它有效,最后一个问题,它是一种只获取 TIMESTAMP 和 class_energy 列的方法吗?
    • 抱歉,您的意思是在过滤之前还是之后?您只需在逗号后的条件后将感兴趣的列列表传递给locx.loc[(x['class_energy'] == 'high') &amp; (x['TIMESTAMP'] &gt; '2016-05-10 04:30:00') &amp; (x['TIMESTAMP'] &lt; '2016-05-10 05:00:00'), ['TIMESTAMP', 'class_energy'] ]
    猜你喜欢
    • 2018-12-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-06-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多