python – Pandas在这里做的是什么,我的索引[0]和[1]引用了相同的值?

我有一个包含这些索引和值的数据框:

df[df.columns[0]]

1              example

2              example1

3              example2

当我访问df [df.columns [0]] [2]时,我得到“example1”.说得通.这就是指数的运作方式.

然而,当我访问df [df.columns [0]]时,我得到了“example”,当我访问df [df.columns [1]]时我得到了例子.因此对于

df[df.columns[0]][0]

df[df.columns[0]][1]

我得到“榜样”.

奇怪的是,我可以删除“row”0,结果是1被删除:

gf = df.drop(df.index[[0]])

gf



exampleDF   
2   example1

3   example2

但是当我删除第1行时,那么

2 example1

被删除,而不是示例.

这对我来说有点混乱; Pandas中关于行索引的标准是否存在不一致,或者我错过了什么/出错了?

最佳答案 您可能导致pandas在.iloc(基于索引)和.loc(基于标签)索引之间切换.

Python中的所有数组都是0索引的.我注意到你的DataFrame中的索引是从1开始的.所以当你运行df [df.column [0]] [0]时,pandas意识到没有名为0的索引,并且回退到.iloc,它通过数组定位东西索引.因此,它返回它在数组的第一个位置找到的内容,即“示例”.

然而,当您运行df [df.column [0]] [1]时,pandas意识到存在索引标签1,并使用.loc返回它在该标签处找到的内容,这又是“示例”.

删除第一行时,您的DataFrame没有索引标签0和1.因此,当您按照自己的方式在这些位置查找元素时,它不会返回None,而是返回基于数组的索引并返回数组中第0位和第1位的元素.

要强制pandas使用两种索引技术之一,请使用.iloc或.loc. .loc是基于标签的,如果你尝试df [df.column [0]].loc [0]会引发KeyError. .iloc是基于索引的,当你尝试df [df.column [0]]时会返回’example’.iloc [0].

附加说明

这些命令是不好的做法:df [col_label] .iloc [row_index]; DF [col_label]的.loc [ROW_LABEL].

请使用df.loc [row_label,col_label];或者df.iloc [row_index,col_index];或者df.ix [row_label_or_index,col_label_or_index]

有关更多信息,请参见Different Choices for Indexing.

点赞