我来自C ++背景并且最近开始学习python。我正在研究索引和选择数据。我在pandas库中的.iloc[]
,Series
和DataFrame
课程中遇到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
有谁能告诉我在哪里学习更多关于这类运营商的信息。
答案 0 :(得分:4)
.iloc
是一个类实例。
pd.DataFrame().iloc
Out[2]: <pandas.core.indexing._iLocIndexer at 0x97a2470>
答案 1 :(得分:4)
实际答案:您应该将iloc
和loc
分别视为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
对于数据框来说基本相同,只需要指定一个额外的维度,并且iloc
和loc
变得更有用,但是超出了这个问题的范围。
更深层次的回答:如果您真的想在更深层次上理解这一点,那么您需要了解__getitem__
。您可以开始here了解一些基础知识。 @ayhan上述评论中提供的second link中的答案也很出色,与您的问题非常相关。