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

时间:2015-01-18 12:52:14

标签: python pandas indexing dataframe

短版

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

详细

问题描述

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

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

我在Pandas API page寻找了该功能的完整规范。虽然记录了许多其他方法,但Dataframe.__getitem__()不是。

我也看了the tutorial,但我不相信这是在试图详尽无遗。

我确实查看了Dataframe.__getitem__()的源代码(我在下面的答案中描述了第一遍)。显而易见的是,可以接受各种完全不同的类型作为输入,但是对代码进行反向工程以确定在传递每种类型时会发生什么似乎不能成为掌握此方法的预期方法。

其他背景

Pandas是Python在科学和统计学中最重要的库之一,DataFrame可以说是Pandas中最核心的对象,而[]运算符可以说是DataFrame上最核心的方法。因此,实际回答我在这里发布的问题具有非常高的教学价值,而不仅仅是对我有用。

1 个答案:

答案 0 :(得分:3)

我怀疑这个功能缺少doc的部分原因是由于源代码中缺少doc注释,现在我看一下。如果没有人提出任何更加用户友好的内容,这里是实际的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)

...至少给出了DataFrame []接受的密钥(索引)类型的顶级细分。