使用布尔运算符选择数据时出现Pandas ValueError

2 投票
1 回答
10958 浏览
提问于 2025-04-18 02:55

我正在尝试使用这段代码来创建一个新的 Pandas DataFrame,这个新的表格只包含我关注的两列都有值的行。

sve2_hz = sve2_all[[(sve2_all[' Q l/s'].notnull()) & (sve2_all['Flow_mm/day'].notnull())]]

我还尝试过去掉里面的括号:

sve2_hz = sve2_all[[sve2_all[' Q l/s'].notnull() & sve2_all['Flow_mm/day'].notnull()]]

但是,Pandas 报了以下错误:

---------------------------------------------------------------------------
ValueError                                Traceback (most recent call last)
<ipython-input-110-0f3ba1c28b18> in <module>()
----> 1 sve2_hz = sve2_all[[(sve2_all[' Q l/s'].notnull()) & (sve2_all['Flow_mm/day'].notnull())]]
      2 print sve2_hz.head()

C:\Users\AppData\Local\Enthought\Canopy32\User\lib\site-packages\pandas\core\frame.pyc in __getitem__(self, key)
   1650         if isinstance(key, (Series, np.ndarray, list)):
   1651             # either boolean or fancy integer index
-> 1652             return self._getitem_array(key)
   1653         elif isinstance(key, DataFrame):
   1654             return self._getitem_frame(key)

C:\Users\AppData\Local\Enthought\Canopy32\User\lib\site-packages\pandas\core\frame.pyc in _getitem_array(self, key)
   1687             elif len(key) != len(self.index):
   1688                 raise ValueError('Item wrong length %d instead of %d.' %
-> 1689                                  (len(key), len(self.index)))
   1690             # _check_bool_indexer will throw exception if Series key cannot
   1691             # be reindexed to match DataFrame rows

ValueError: Item wrong length 1 instead of 16636.

有人能解释一下这个错误信息是什么意思吗?特别是那句“Series key cannot be reindexed to match DataFrame rows”。

1 个回答

0

@EdChum 提出的解决方案是去掉里面那一对括号:

sve2_all[(sve2_all[' Q l/s'].notnull()) & (sve2_all['Flow_mm/day'].notnull())]

撰写回答