loc和iloc的类型是什么? (括号与括号)

时间:2017-06-21 11:11:35

标签: python pandas

我来自C ++背景并且最近开始学习python。我正在研究索引和选择数据。我在pandas库中的.iloc[]SeriesDataFrame课程中遇到Panel。我无法理解.iloc是什么?是功能还是属性?很多时候我错误地使用()代替[]并且没有得到实际结果(但它不会给我一个错误)。

示例:

In [43]: s = pd.Series(np.arange(5), index=np.arange(5)[::-1], dtype='int64')

In [44]: s[s.index.isin([2, 4, 6])]
Out[44]: 
4    0
2    2
dtype: int64

In [45]: s.iloc(s.index.isin([2,4,6]))
Out[45]: <pandas.core.indexing._iLocIndexer at 0x7f1e68d53978>

In [46]: s.iloc[s.index.isin([2,4,6])]
Out[46]: 
4    0
2    2
dtype: int64

有谁能告诉我在哪里学习更多关于这类运营商的信息。

2 个答案:

答案 0 :(得分:4)

.iloc是一个类实例。

pd.DataFrame().iloc
Out[2]: <pandas.core.indexing._iLocIndexer at 0x97a2470>

来源:Pandas Source Code - indexing.py#L1626

答案 1 :(得分:4)

实际答案:您应该将ilocloc分别视为python列表和字典的pandas扩展,并将它们视为查找而不是函数或方法调用。因此,保持python语法,始终使用[]而不是()

>>> ser = pd.Series( { 'a':3, 'c':9 } )

>>> ser.loc['a']    # pandas dictionary syntax (label-based)
3
>>> ser.iloc[0]     # pandas list/array syntax (location-based)
3

对于数据框来说基本相同,只需要指定一个额外的维度,并且ilocloc变得更有用,但是超出了这个问题的范围。

更深层次的回答:如果您真的想在更深层次上理解这一点,那么您需要了解__getitem__。您可以开始here了解一些基础知识。 @ayhan上述评论中提供的second link中的答案也很出色,与您的问题非常相关。