gpt4 book ai didi

python - loc 和 ix 之间的意外差异

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

在 Pandas 中对 DataFrame 进行子集化时,我注意到 locix 之间存在一个奇怪的区别。

import pandas as pd

# Create a dataframe
df = pd.DataFrame({'id':[10,9,5,6,8], 'x1':[10.0,12.3,13.4,11.9,7.6], 'x2':['a','a','b','c','c']})
df.set_index('id', inplace=True)

df
x1 x2
id
10 10.0 a
9 12.3 a
5 13.4 b
6 11.9 c
8 7.6 c


df.loc[[10, 9, 7]] # 7 does not exist in the index so a NaN row is returned
df.loc[[7]] # KeyError: 'None of [[7]] are in the [index]'
df.ix[[7]] # 7 does not exist in the index so a NaN row is returned

为什么 df.loc[[7]]df.ix[[7]] 返回带有 NaN 的行时抛出错误?这是一个错误吗?如果不是,为什么 locix 是这样设计的?

(注意我在 Python 3.5.1 上使用 Pandas 0.17.1)

最佳答案

正如@shanmuga 所说,这是(至少对于 loc)预期和记录的行为,而不是错误

关于 loc/selection by label 的文档,给出了这方面的规则(http://pandas.pydata.org/pandas-docs/stable/indexing.html#selection-by-label):

At least 1 of the labels for which you ask, must be in the index or a KeyError will be raised!

这意味着如果该标签不在索引中,则将 loc 与单个标签(例如 df.loc[[7]])一起使用会引发错误,但是当它与标签列表(例如 df.loc[[7,8,9]])一起使用时,如果索引中至少有一个标签,则不会引发错误。


对于 ix 我不太确定,而且我认为这没有明确记录。但在任何情况下,ix 都更加宽松并且有很多边缘情况(回退到整数位置等),并且是一个兔子洞。但一般来说,ix 将始终返回一个使用提供的标签索引的结果(因此不会像 loc 那样检查标签是否在索引中),除非 它回落到整数位置索引。
在大多数情况下,建议使用 loc/iloc

关于python - loc 和 ix 之间的意外差异,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34259637/

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