DataFrame loc 与 iloc 两者“索引”区别
首先声明本人为小白,只是为了 方便记录自己的学习过程并且监督自己所写的专栏,有什么问题欢迎各位大佬在评论区指正或者讨论。另外,需要引用请注明出处(虽然不是完全原创但是也是自己辛辛苦苦查资料写的啊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:
设置index为5,6(可以在列边看到),列名为a,b,c(可以行上看到)
假设想要得到2,3这两个数字,那用两个方法需要怎么做呢?
DataFrame.iloc实现
2,3在第0行,第1,2列,所以用iloc实现如上。
DataFrame.columns.get_indexer()
这里提一下这个方法,这个方法可以在列名很多不方便的时候,通过列名得到位置。
比如上面语句就可修改成:
DataFrame.loc实现
2,3所在行索引(index)为5,列名为’b‘,‘c’
DataFrame.index
这里提一下这个属性,如果已知目标所在数字顺序要通过loc实现就可以用DataFrame.index[数字顺序]来实现。
比如上述语句可以修改成:
总结
位于这两个方法前面位置的参数,区别在于是index还是单纯的数字顺序。并且通过一些方法或属性,可以在一些情况下已知某种而得到另一种。