Pandas:DataFrame loc 与 iloc 两者“索引”区别

DataFrame loc 与 iloc 两者“索引”区别

    • 问题导入
    • DataFrame.loc
    • DataFrame.iloc
    • 对比举例
      • DataFrame.iloc实现
        • DataFrame.columns.get_indexer()
      • DataFrame.loc实现
        • DataFrame.index
    • 总结

首先声明本人为小白,只是为了 方便记录自己的学习过程并且监督自己所写的专栏,有什么问题欢迎各位大佬在评论区指正或者讨论。另外,需要引用请注明出处(虽然不是完全原创但是也是自己辛辛苦苦查资料写的啊QAQ),谢谢。

问题导入

遇到这个问题是在iloc中用索引希望获取相应数据时出现了报错:
在这里插入图片描述
可能以前在学到loc和iloc的时候没有注意到(之前也没有太在意索引和单纯数字顺序的区别),且以前用DataFrame时,几乎都是直接重新生成索引,所以索引和顺序是一样的,没有察觉有问题。

下面开始探讨这个问题:
贴张Pandas官网截图:
(https://pandas.pydata.org/docs/reference/frame.html 在Indexing, iteration部分即可看到 )
在这里插入图片描述
可以看到对于loc的描述是:通过标签或者一个布尔数组来得到一些行和列;iloc则是:单纯基于整数位置的索引,用于按位置选择。

DataFrame.loc

前面所述的标签就是Index(即用DataFrame.index可以得到的行便签(The index (row labels) of the DataFrame.))和column(用DataFrame.columns可以得到)。

DataFrame.iloc

前面所述的整数位置就像数数字一样的从0开始按顺序给每一行和每一列都标明了位置,按照这个位置来进行选择。

对比举例

下面以一个很简单明了的例子来说明:
首先创建一个DataFrame:
Pandas:DataFrame loc 与 iloc 两者“索引”区别_第1张图片
设置index为5,6(可以在列边看到),列名为a,b,c(可以行上看到)

假设想要得到2,3这两个数字,那用两个方法需要怎么做呢?

DataFrame.iloc实现

Pandas:DataFrame loc 与 iloc 两者“索引”区别_第2张图片
2,3在第0行,第1,2列,所以用iloc实现如上。

DataFrame.columns.get_indexer()

这里提一下这个方法,这个方法可以在列名很多不方便的时候,通过列名得到位置。
比如上面语句就可修改成:
Pandas:DataFrame loc 与 iloc 两者“索引”区别_第3张图片

DataFrame.loc实现

Pandas:DataFrame loc 与 iloc 两者“索引”区别_第4张图片

2,3所在行索引(index)为5,列名为’b‘,‘c’

DataFrame.index

这里提一下这个属性,如果已知目标所在数字顺序要通过loc实现就可以用DataFrame.index[数字顺序]来实现。
比如上述语句可以修改成:
Pandas:DataFrame loc 与 iloc 两者“索引”区别_第5张图片

总结

位于这两个方法前面位置的参数,区别在于是index还是单纯的数字顺序。并且通过一些方法或属性,可以在一些情况下已知某种而得到另一种。

你可能感兴趣的:(机器学习记录,python,索引,pandas)