Python iloc与直接切片?

Python iloc与直接切片?,python,pandas,Python,Pandas,我已经阅读了很多关于iloc和loc的讨论,我理解其中的区别,但我不理解的是以下两者之间的区别: indexed_data['var'][0:10] indexed_data['var'][0:10] vs 这些似乎是相同的东西,并给出相同的输出 我错过什么了吗?谢谢 在pandas的最新版本中,这是为ix功能工作的 但是从0.20+ 因此,对var列的位置使用get_loc,并仅使用iloc选择: indexed_data.iloc[0:10, df.columns.get_loc('va

我已经阅读了很多关于iloc和loc的讨论,我理解其中的区别,但我不理解的是以下两者之间的区别:

indexed_data['var'][0:10]
indexed_data['var'][0:10]
vs

这些似乎是相同的东西,并给出相同的输出


我错过什么了吗?谢谢

在pandas的最新版本中,这是为
ix
功能工作的

但是从0.20+

因此,对
var
列的位置使用
get_loc
,并仅使用
iloc
选择:

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

在我看来,两者之间的区别是:

indexed_data['var'][0:10]
indexed_data['var'][0:10]
以及:

主要是在
][
中。我认为最好是避免它,因为可能的
链接索引


:

粗略的规则是,每当你看到背对背的方括号,][,你就会自找麻烦。用
.loc[…,…]
替换它,你就会被设置好

因此,最好在这里使用本机pandas函数,如
loc
iloc

然后尝试比较每个方法调用的函数,但在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
替代解决方案:

indexed_data.loc[indexed_data.index[0:10], 'var']

请阅读-这将有助于决定在不同情况下使用哪个索引器…

作为对其他答案的补充,还请遵守以下说明:

虽然用于选择和设置的标准Python/Numpy表达式直观且便于交互工作,但对于生产代码,我们建议使用优化的pandas数据访问方法,
.at
.iat
.loc
.iloc


我不知道,今天早些时候正在寻找类似的东西:)你能解释一下原因吗?我本以为使用这些键更像是“pythonic”。我只是不明白直接切片和使用iloc之间的区别。我不使用ix,也明白它是不受欢迎的(关于ix vs iloc vs loc有很多帖子,我读过)。我试着创造一些答案,但对我来说并不容易。我需要更多的时间:(非常抱歉。回答得很好。+1就链接而言,这是一个经常被问及的“问题”,我认为该链接将回答很多问题