Pandas DataFrame:__ getitem __()的完整规范?

gwi*_*man 10 python indexing dataframe pandas

精简版

对于pandas Dataframe.__getitem__(),允许的输入是什么(确实是输入类型),以及函数产生的结果是什么?

细节

问题描述

我想编写充分利用DataFrame []的代码Dataframe.__getitem__().为此,我想了解有关输入/返回结果的信息,在API页面上找到的详细程度,尽管此方法不可用.

到目前为止已经做了什么来解决它

我在Pandas API页面上查找了该功能的完整规范.虽然记录了许多其他方法,但事实Dataframe.__getitem__()并非如此.

我也查看了教程,但我不相信这是试图详尽无遗的.

我确实查看了源代码Dataframe.__getitem__()(在下面我自己的答案中描述的第一遍).这显然是一个很多种不同类型的可以被接受作为输入,但逆向工程的代码,以确定当每个这些类型传递的好像就不能掌握这种方法的预期方式会发生什么.

附加背景

大熊猫是Python的科学和统计中的作用最重要的图书馆之一,数据帧可以说是熊猫最核心的对象,而[]运营商可以说是在数据框最核心的方法.因此,实际回答我在这里发布的问题具有非常高的教学价值,而不仅仅是一些实用工具.

gwi*_*man 8

我怀疑此函数缺少文档的部分原因是源代码中缺少文档注释,现在我查看了它。万一没有人想出更用户友好的东西,这里是实际的DataFrame.__getitem__()方法:

def __getitem__(self, key):

    # shortcut if we are an actual column
    is_mi_columns = isinstance(self.columns, MultiIndex)
    try:
        if key in self.columns and not is_mi_columns:
            return self._getitem_column(key)
    except:
        pass

    # see if we can slice the rows
    indexer = _convert_to_index_sliceable(self, key)
    if indexer is not None:
        return self._getitem_slice(indexer)

    if isinstance(key, (Series, np.ndarray, list)):
        # either boolean or fancy integer index
        return self._getitem_array(key)
    elif isinstance(key, DataFrame):
        return self._getitem_frame(key)
    elif is_mi_columns:
        return self._getitem_multilevel(key)
    else:
        return self._getitem_column(key)
Run Code Online (Sandbox Code Playgroud)

...这至少给出了 DataFrame[] 接受的键(索引)种类的顶级细分。