【发布时间】:2016-12-17 14:03:36
【问题描述】:
为什么我们对 pandas 数据框使用“loc”?似乎以下代码无论是否使用 loc 都可以以类似的速度编译和运行
%timeit df_user1 = df.loc[df.user_id=='5561']
100 loops, best of 3: 11.9 ms per loop
或
%timeit df_user1_noloc = df[df.user_id=='5561']
100 loops, best of 3: 12 ms per loop
那么为什么要使用 loc?
编辑:这已被标记为重复问题。但是尽管pandas iloc vs ix vs loc explanation? 确实提到了 *
您只需使用数据框的 getitem:
*
df['time'] # equivalent to df.loc[:, 'time']
它没有说明我们为什么使用 loc,虽然它确实解释了 loc 的许多特性,但我的具体问题是“为什么不完全省略 loc”?我已经接受了下面一个非常详细的答案。
另外,其他帖子的答案(我认为不是答案)在讨论中非常隐藏,任何搜索我正在寻找的东西的人都会发现很难找到信息,并且会更好地服务于为我的问题提供的答案。
【问题讨论】:
-
@JGreenwell - 不是真的,他们在讨论 .loc、.iloc 和 .ix 之间的区别,但在这里我只是问为什么要使用 .loc,而不是为什么要在 .iloc 或.ix,我对 iloc 或 ix 不感兴趣,我试图首先了解 loc 以及为什么我们使用它,而不是仅仅将它放在任何地方都没有。
-
查看answer by ajcr 的末尾,其中包括
.loc和.iloc与.ix: 或相关部分的一般用法,如果您只使用标签进行索引,或者仅使用整数位置进行索引,坚持使用 loc 或 iloc 以避免意外结果。" -
本质上,当您不指定索引技术时,pandas 会做出回退和最佳猜测。所以它会通过它们中的每一个。在 DataFrame 上,默认值是在列上使用
.loc。在 Series 上,默认在行上使用.loc,因为没有列。 -
JGreenwell 和 Kartik - 我不明白。我不是,我再说一遍,我对 .iloc 不感兴趣,让我们假装 .iloc 不存在,假装 .ix 不存在。我只是想知道为什么我应该使用 .loc 而不是像我的问题中的代码那样把它放在一起。
标签: python pandas series pandas-loc