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. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |