gpt4 book ai didi

python - IndexingError 使用 bool 索引

转载 作者:太空宇宙 更新时间:2023-11-04 08:08:35 27 4
gpt4 key购买 nike

我正在尝试使用类似于 here 的 bool 系列索引数据框

In [1]: import pandas as pd
In [2]: idx = pd.Index(["USD.CAD", "AUD.NZD", "EUR.USD", "GBP.USD"],
...: name="Currency Pair")
In [3]: pairs = pd.DataFrame({"mean":[3.6,5.1,3.6,2.7], "count":[1,5,8,2]}, index=idx)
In [4]: mask = pairs.reset_index().loc[:,"Currency Pair"].str.contains("USD")

In [5]: pairs.reset_index()[mask]
Out[5]:
Currency Pair count mean
0 USD.CAD 1 3.6
2 EUR.USD 8 3.6
3 GBP.USD 2 2.7

上面的代码按预期工作但是当我尝试使用没有索引重置的原始数据帧时我得到以下错误

In [6]: pairs[mask]
C:\Anaconda\lib\site-packages\pandas\core\frame.py:1808: UserWarning: Boolean Series key will be reindexed to match DataFrame index.
"DataFrame index.", UserWarning)
---------------------------------------------------------------------------
IndexingError Traceback (most recent call last)
<ipython-input-6-9eca5ffbdaf7> in <module>()
----> 1 pairs[mask]

C:\Anaconda\lib\site-packages\pandas\core\frame.pyc in __getitem__(self, key)
1772 if isinstance(key, (Series, np.ndarray, Index, list)):
1773 # either boolean or fancy integer index
-> 1774 return self._getitem_array(key)
1775 elif isinstance(key, DataFrame):
1776 return self._getitem_frame(key)

C:\Anaconda\lib\site-packages\pandas\core\frame.pyc in _getitem_array(self, key)
1812 # _check_bool_indexer will throw exception if Series key cannot
1813 # be reindexed to match DataFrame rows
-> 1814 key = _check_bool_indexer(self.index, key)
1815 indexer = key.nonzero()[0]
1816 return self.take(indexer, axis=0, convert=False)

C:\Anaconda\lib\site-packages\pandas\core\indexing.pyc in _check_bool_indexer(ax, key)
1637 mask = com.isnull(result.values)
1638 if mask.any():
-> 1639 raise IndexingError('Unalignable boolean Series key provided')
1640
1641 result = result.astype(bool).values

IndexingError: Unalignable boolean Series key provided

我对这个错误感到困惑,因为我的印象是如果 bool 索引长度与数据帧的长度不同,这是收到的错误?如下所示,情况并非如此。

In [7]: len(mask)
Out[7]: 4
In [8]: len(pairs)
Out[8]: 4
In [9]: len(pairs.reset_index())
Out[9]: 4

最佳答案

我想我会记下评论中指出的@EdChum 解决方案。他指出的问题是 mask.index 与 pairs.index 不一致。用成对的索引替换掩码的索引,我们得到了预期的行为。

In[10]: mask.index = pairs.index.copy()
In[11]: pairs[mask]
Out[11]:
count mean
Currency Pair
USD.CAD 1 3.6
EUR.USD 8 3.6
GBP.USD 2 2.7

关于python - IndexingError 使用 bool 索引,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27112755/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com