白璐123

2020-12-06   阅读量: 1394

Python 数据分析师

Python Pandas 中索引和切片用法汇总

扫码加入数据分析学习群

相比学了Python pandas清洗的亲们对索引和切片应该多少都有过一段时间的混乱,那么下面借此机会特意过来剖析一下相关的用法。此次我们分为三部分进行解析:列索引,iloc方法和loc方法,使用dataframe, user_info

image.png

  1. 取出对应列

此种方法在pandas中是最常见的,我们直接使用dataframe的名称+对应列名称即可实现。

user_info["出生地"], 即可取出对应此列,此列取出后数据类型为Series

那么如果我需要取两列呢,可否实现,答案是可以:

user_info[["出生地","血型"]]----将你想要的列名称打包到一个列表传进去


另外,我们还可以通过方法进行列提取的实现:

user_info.出生地

貌似这种做法更简单,至少看着写法比较清爽,但是请务必注意,如果列名称存在空格,特别是不可见的时候,此种方法会失效。但是上面字符串的方法是可以实现的


2. loc 显示索引

此种方法最简单的理解就是根据显示出来的行索引和列索引标签实现数据的提取。

此时颇有应你所想,取你所取的意思。最为简单的公式可为.loc[”行标签“,”列标签“]

user_info.loc["钢铁侠","年龄"]

但是如果仅仅一行一列交叉的数据并不能满足我们呢,任性的就是需要多行多列数据,需要怎么办呢?

user_info.loc[["灭霸","钢铁侠"],["年龄",""出生地]]-----简单粗暴,将你想要的行名称和列名称打包成列表传到对应行标签,列标签位置,实现你的人生理想。


后来的你也许会有更多的要求,我要的是某两列的所有行,ok,看下面,满足你。

user_info.loc[:,["年龄","出生地","性别"]]-----将你所需要全部体现的行用“:”进行代替。


tips:那么此时,你会否发现这种写法,你会否发现这种写法貌似出现过呢?

是的,似曾相识,这种用法和上面的取列有什么区别呢?

user_info[["出生地","血型"]]

user_info.loc[:,["年龄","出生地","性别"]]


一定要注意区分哦


3. iloc隐士索引:

隐式索引为使用行列的索引值,不看行列索引标签,只看数据是否处于表中的一个什么位置。即,根据真正的行列索引来取

user_info.iloc[0,:]----行索引,列索引

user_info.iloc[0],这也是取行哦,列默认为所有列,所以就省略了上面的:

user_info.iloc[:,0]----取第一列


此时取出的一列或者一行的格式也是Series,往往在我们取出一行的时候,我们会发现Series的dtype变成了object,是的,因为一行数据中可能会存在数值,字符串,布尔型等多种数据类型,此时的Series数据类型往往是object。


此时如果隐士索引想要取多列多行怎么办呢?事实上,隐式索引的切片是更为功能强大的,因为索引是支持步长的,因为索引是数值啊。

user_info.iloc[1::2,1:2]---- 从第一行到最后一行步长为二进行取,取第一列

user_info.iloc[[1,3],[2,4,5]]----举一反三,根据是上面你们看到的打包,你们应该也会将对用的索引值打包成列表进行多样化取值了。


4. 释疑iloc和loc一些你看到过的让你怀疑人生的写法。

明明说好了loc是显示索引,用的是行列标签。iloc用的是行列的索引值,为什么我们在有些代码中看到了loc[1,:],这到底是写错了还是世界爆炸了?


答案是:都没有错,不要怀疑。因为这里面的行标签就是行索引,那么我们就创建一个很简单的dataframe来看一下,这样让人心塞但是还是存在的功能。

image.png


这里面的行标签和行索引是一样的哦,那么这时对于行的写法,loc和iloc是一样的哦。

image.png

image.png

ps:取行和取列再复习下:

image.png


综上所述,你会发现隐式索引和显示索引其实在某些情况下是可以同时使用的,但是要注意,这样的使用是存在隐患的。

比如当我们的索引标签虽然是数值,但是数值是存在重复项或者存在缺失值的,这样行索引标签对应的行索引是不一样的。

在取数据的时候,万望记得稳妥为上。

添加CDA认证专家【维克多阿涛】,微信号:【cdashijiazhuang】,提供数据分析指导及CDA考试秘籍。已助千人通过CDA数字化人才认证。欢迎交流,共同成长!
123.7990 4 0 关注作者 收藏

评论(0)


暂无数据

推荐课程

推荐帖子