我的索引[0]和[1]指的是同一个值,Pandas在这里做什么?[英] What is Pandas doing here that my indexes [0] and [1] refer to the same value?

本文是小编为大家收集整理的关于我的索引[0]和[1]指的是同一个值,Pandas在这里做什么?的处理方法,想解了我的索引[0]和[1]指的是同一个值,Pandas在这里做什么?的问题怎么解决?我的索引[0]和[1]指的是同一个值,Pandas在这里做什么?问题的解决办法?那么可以参考本文帮助大家快速定位并解决问题。

问题描述

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

df[df.columns[0]]

1              example

2              example1

3              example2

当我访问 df[df.columns[0]][2] 时,我得到"example1".说得通.这就是索引的工作原理.

但是,当我访问 df[df.columns[0]] 时,我得到了"示例",当我访问 df[df.columns[1]] 时,我也得到了示例.所以对于

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

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

我得到"示例".

奇怪的是,我可以删除"行"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.因此,它返回它在数组的第一个位置找到的内容,即 'example'.

但是,当您运行 df[df.column[0]][1] 时,pandas 意识到有一个索引标签 1,并使用 .loc 返回它在该标签处找到的内容,这又是 'example'.

当您删除第一行时,您的 DataFrame 没有索引标签 0 和 1.因此,当您以您的方式在这些位置定位元素时,它不会返回 None 给您,而是下降回到基于数组的索引并返回数组中第 0 和第 1 位的元素.

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

<小时>

补充说明

这些命令是不好的做法: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]

请参阅不同的索引选择 了解更多信息.

本文地址:https://www.itbaoku.cn/post/1728210.html