【问题标题】:Python pandas.core.indexing.IndexingError: Unalignable boolean Series key providedPython pandas.core.indexing.IndexingError:提供了不可对齐的布尔系列键
【发布时间】:2017-09-23 00:31:01
【问题描述】:

所以我读取了一个包含 29 列的数据表,并添加了一个索引列(总共 30 个)。

Data = pd.read_excel(os.path.join(BaseDir, 'test.xlsx'))
Data.reset_index(inplace=True)

然后,我想将数据子集化为仅包含列名包含“ref”或“Ref”的列;我从另一个 Stack 帖子中得到以下代码:

col_keep = Data.ix[:, pd.Series(Data.columns.values).str.contains('ref', case=False)]

但是,我不断收到此错误:

    print(len(Data.columns.values))
    30
    print(pd.Series(Data.columns.values).str.contains('ref', case=False))
    0     False
    1     False
    2     False
    3     False
    4     False
    5     False
    6     False
    7     False
    8     False
    9     False
    10    False
    11    False
    12    False
    13    False
    14    False
    15    False
    16    False
    17    False
    18    False
    19    False
    20    False
    21    False
    22    False
    23    False
    24     True
    25     True
    26     True
    27     True
    28    False
    29    False
    dtype: bool

Traceback (most recent call last):
  File "C:/Users/lala.py", line 26, in <module>
    col_keep = FedexData.ix[:, pd.Series(FedexData.columns.values).str.contains('ref', case=False)]
  File "C:\Users\AppData\Local\Programs\Python\Python36-32\lib\site-packages\pandas\core\indexing.py", line 84, in __getitem__
    return self._getitem_tuple(key)
  File "C:\Users\AppData\Local\Programs\Python\Python36-32\lib\site-packages\pandas\core\indexing.py", line 816, in _getitem_tuple
    retval = getattr(retval, self.name)._getitem_axis(key, axis=i)
  File "C:\Users\AppData\Local\Programs\Python\Python36-32\lib\site-packages\pandas\core\indexing.py", line 1014, in _getitem_axis
    return self._getitem_iterable(key, axis=axis)
  File "C:\Users\AppData\Local\Programs\Python\Python36-32\lib\site-packages\pandas\core\indexing.py", line 1041, in _getitem_iterable
    key = check_bool_indexer(labels, key)
  File "C:\Users\AppData\Local\Programs\Python\Python36-32\lib\site-packages\pandas\core\indexing.py", line 1817, in check_bool_indexer
    raise IndexingError('Unalignable boolean Series key provided')
pandas.core.indexing.IndexingError: Unalignable boolean Series key provided

所以布尔值是正确的,但为什么它不起作用?为什么总是弹出错误?

感谢任何帮助/提示!非常感谢。

【问题讨论】:

    标签: python pandas


    【解决方案1】:

    我可以通过这种方式重现类似的错误消息:

    import numpy as np
    import pandas as pd
    
    df = pd.DataFrame(np.random.randint(4, size=(10,4)), columns=list('ABCD'))
    df.ix[:, pd.Series([True,False,True,False])]
    

    加注(使用 Pandas 版本 0.21.0.dev+25.g50e95e0)

    pandas.core.indexing.IndexingError: Unalignable boolean Series provided as indexer (index of the boolean Series and of the indexed object do not match
    

    出现问题是因为 Pandas 试图对齐 Series 的索引 在使用 Series 布尔值进行屏蔽之前使用 DataFrame 的列索引 价值观。因为df 有列标签'A', 'B', 'C', 'D' 并且系列有 索引标签0123,Pandas 抱怨标签是 无法对齐。

    您可能不需要任何索引对齐。因此,改为传递 NumPy 布尔数组而不是 Pandas 系列:

    mask = pd.Series(Data.columns.values).str.contains('ref', case=False).values
    col_keep = Data.loc[:, mask]
    

    Series.values 属性返回一个 NumPy 数组。由于在 Pandas 的未来版本中,DataFrame.ix will be removed 在这里使用 Data.loc 而不是 Data.ix,因为我们需要布尔索引。

    【讨论】:

      猜你喜欢
      • 2017-09-13
      • 2018-04-27
      • 2021-04-20
      • 2018-01-03
      • 2020-12-15
      • 1970-01-01
      • 2020-08-05
      • 2023-02-03
      • 1970-01-01
      相关资源
      最近更新 更多