gpt4 book ai didi

python - Pandas iloc vs 直接切片?

转载 作者:太空狗 更新时间:2023-10-30 00:42:50 54 4
gpt4 key购买 nike

我已经阅读了很多关于 iloc 与 loc 的讨论,我理解它们之间的区别,但我不明白它们之间的区别是什么:

indexed_data['var'][0:10]

对比

indexed_data['var'].iloc[0:10]

这些似乎是同一件事,并提供相同的输出。

我错过了什么吗?谢谢!

最佳答案

在 pandas 的最新版本中,这是为 ix 函数工作的。

但是来自 pandas 0.20+ ix indexer is deprecated .

所以使用 get_loc 获取 var 列的位置并仅使用 iloc 进行选择:

indexed_data.iloc[0:10, df.columns.get_loc('var')]

我认为两者之间的区别:

indexed_data['var'][0:10]

和:

indexed_data['var'].iloc[0:10]

主要在][。我认为最好的办法是避免它,因为可能存在 chaining indexing


Modern pandas by Tom Augspurger (pandas dev) get advice :

The rough rule is any time you see back-to-back square brackets, ][, you're in asking for trouble. Replace that with a .loc[..., ...] and you'll be set.

所以最好的办法是在这里使用像lociloc这样的原生pandas函数。

然后尝试比较为每个方法调用的函数,但在 40 分钟后我停止了它(确实调用了很多函数)。

我检查了时间并且每个函数都不同:

indexed_data = pd.DataFrame(np.random.randint(3, size=(2000000,1)), columns=['var'])

In [151]: %timeit indexed_data['var'].iloc[0:100000]
10000 loops, best of 3: 62.1 µs per loop

In [152]: %timeit indexed_data['var'][0:100000]
10000 loops, best of 3: 82.3 µs per loop

In [153]: %timeit indexed_data.iloc[0:100000, indexed_data.columns.get_loc('var')]
10000 loops, best of 3: 155 µs per loop

In [154]: %timeit indexed_data.loc[indexed_data.index[0:100000], 'var']
100 loops, best of 3: 7.36 ms per loop

#numpy approach - output is array
In [155]: %timeit indexed_data['var'].values[0:100000]
100000 loops, best of 3: 5.35 µs per loop

关于python - Pandas iloc vs 直接切片?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45983801/

54 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com