使用布尔运算符选择数据时出现Pandas ValueError
我正在尝试使用这段代码来创建一个新的 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())]