【pandas 小记】rename、reindex、set_index
发布日期:2021-06-28 20:45:44
浏览次数:2
分类:技术文章
本文共 4822 字,大约阅读时间需要 16 分钟。
rename、reindex、set_index区别
rename、reindex、set_index都是pandas中对索引操作的主要方法,它们的区别如下
方法 | 适用场景 | 调用方法 | 备注 |
---|---|---|---|
rename | 传入字典或函数修改索引的名称,即轴标签名,只能对现有轴标签重命名,不能新增或删减索引, | df.rename(dict1) | 当dict1中包含不存在的索引时,参数errors,可以设定捕捉错误或忽略 |
reindex | 返回一个符合新索引的DataFrame,之前不存在的索引,用NaN填充。 | df.reindex(new_index) | 参数copy=True时,即使新索引与旧索引相同,也会返回新对象 |
set_index | 将一列数据设置为索引 | df.set_index(‘col_name’) | 参数drop=True,将作为索引的列删除。 |
1,rename详解
(1) 语法格式
DataFrame.rename(self, mapper=None, index=None, columns=None, axis=None, copy=True, inplace=False, level=None, errors='ignore')
(2) 参数说明
mapper:dict 或者 函数,旧轴标签与新轴标签的对应关系,与axis连用,已确定修改哪个轴向上的轴标签。 index:dict 或者 函数,旧轴标签与新轴标签的对应关系,等价于 (mapper, axis=0)。 columns:dict 或者 函数,旧轴标签与新轴标签的对应关系,等价于 (mapper, axis=1)。 axis:轴向,与mapper连用,已确定修改哪个轴标签。 inplace:bool,默认False,若为True,则直接修改原对象的轴标签。 level:分层索引时,指定修改哪一层轴标签。 errors:当字典中包含不存在的轴标签时,捕捉错误还是忽略。(3) demo
frame = pd.DataFrame(np.arange(9).reshape((3, -1)), \ index=list('bce'), \ columns=['Ohio', 'Texas', 'Callfornis'])frame.rename(index={ 'b': 'B', 'c': 'C', 'e': 'E'}, inplace=True) # 直接修改原对象print(frame)""" Ohio Texas CallfornisB 0 1 2C 3 4 5E 6 7 8"""frame1 = frame.rename(mapper={ 'B': 'Bb', 'C': 'Cc', 'E': 'Ee'}, axis=0) # mapper,axis方式""" Ohio Texas CallfornisBb 0 1 2Cc 3 4 5Ee 6 7 8"""frame2 = frame.rename(columns=str.upper) # 传入函数,转换成大写""" OHIO TEXAS CALLFORNISB 0 1 2C 3 4 5E 6 7 8"""frame.rename(index={ 'B': 'Bb', 'C': 'Cc', 'D': 'De', 'E': 'Ee'}, errors='raise') # 不存在的轴标签,捕捉错误"""KeyError: "['D'] not found in axis"""
2,reindex详解
(1) 语法格式
DataFrame.reindex(self, labels=None, index=None, columns=None, axis=None, method=None, copy=True, level=None, fill_value=nan, limit=None, tolerance=None)
(2) 参数说明
labels:新的索引序列,与参数axis使用,已确定新索引的轴向。 index:0轴方向的索引。 columns:1轴方向的索引。 axis:轴向,与labels一起使用。 method:重建索引时插值的方法,因为需要获取前一个/后一个索引对应的数据,所以这仅适用于递增/递减的索引。‘backfill’/’bfill’,后向填充,用后一个索引对应的数据来插值,pad’/’ffill’’,前向填充,用前一个索引对应的数据来插值。 copy:是否返回副本; level:分层索引时,新索引在哪一层。 fill_value:重建索引后缺失数据的填充值,默认np.NaN。 limit:前向/后向填充时,填充的最大尺寸。(3) demo
frame = pd.DataFrame(np.arange(9).reshape((3, -1)), \ index=list('bce'), \ columns=['Ohio', 'Texas', 'Callfornis'])new_index = ['a', 'b', 'd']frame1 = frame.reindex(index=new_index) # 参数 index 则作用于行索引""" Ohio Texas Callfornisa NaN NaN NaNb 0.0 1.0 2.0d NaN NaN NaN"""frame2 = frame.reindex(labels=new_index, axis=0) # label 与 axis 同时使用""" Ohio Texas Callfornisa NaN NaN NaNb 0.0 1.0 2.0d NaN NaN NaN"""# methon 这仅适用于索引单调递增/递减的df,缺失值需要根据索引顺序取值new_index = ['a', 'b', 'd', 'e', 'f', 'g']frame3 = frame.reindex(index=new_index, method='pad')""" a 没有前一行所以为NaN Ohio Texas Callfornisa NaN NaN NaNb 0.0 1.0 2.0d 3.0 4.0 5.0e 6.0 7.0 8.0f 6.0 7.0 8.0g 6.0 7.0 8.0"""frame4 = frame.reindex(index=new_index, method='pad', limit=1) # limit 与 method 连用 限制填充行/列数""" Ohio Texas Callfornisa NaN NaN NaNb 0.0 1.0 2.0d 3.0 4.0 5.0e 6.0 7.0 8.0f 6.0 7.0 8.0g NaN NaN NaN"""frame5 = frame.reindex(index=new_index, fill_value=0) # 用0填充缺失数据""" Ohio Texas Callfornisa 0 0 0b 0 1 2d 0 0 0e 6 7 8f 0 0 0g 0 0 0"""
3,set_index详解
(1) 语法格式
DataFrame.set_index(self, keys, drop=True, append=False, inplace=False, verify_integrity=False)
(2) 参数说明
keys:列名,可以是单个列名,或者列名组合, Series, Index, np.ndarray, and instances of Iterator.。 drop:bool,是否删除作为索引的列,默认为True。 append:bool,是否将列作为索引,而不删除原来的索引,默认为True。 inplace:bool,是否直接修改原对象,默认为False,则会产生一个新对象。 verify_integrity:bool,是否检验新索引包含重复值,默认为False。(3) demo
df = pd.DataFrame({ 'month': [1, 4, 7, 10], 'year': [2012, 2014, 2013, 2014], 'sale': [55, 40, 84, 31]})df1 = df.set_index('month')""" year salemonth 1 2012 554 2014 407 2013 8410 2014 31"""df2 = df.set_index(['year', 'month']) # 两列一起作为索引,形成分层索引""" saleyear month 2012 1 552014 4 402013 7 842014 10 31"""df3 = df.set_index([pd.Index([1, 2, 3, 4]), 'year']) # 将index对象和列名作为索引""" month sale year 1 2012 1 552 2014 4 403 2013 7 844 2014 10 31"""s = pd.Series(['a', 'b', 'c', 'd'])df4 = df.set_index(s,append=True) # 将Series append为索引,而不删除原来的索引""" month year sale0 a 1 2012 551 b 4 2014 402 c 7 2013 843 d 10 2014 31"""
转载地址:https://blog.csdn.net/yangjjuan/article/details/104704407 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!
发表评论
最新留言
能坚持,总会有不一样的收获!
[***.219.124.196]2024年04月18日 13时58分43秒
关于作者
喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
太牛了!Android程序员最大的悲哀是什么?面试真题解析
2019-04-29
作为字节跳动面试官,BAT这种大厂履历意味着什么?赶快收藏备战金九银十!
2019-04-29
大牛深入讲解!Android面试中常问的MMAP到底是啥东东?再不刷题就晚了!
2019-04-29
太赞了!你会的还只有初级安卓工程师的技术吗?3面直接拿到offer
2019-04-29
深入解析Android-AutoLayout,全网疯传
2019-04-29
深入解析android核心组件和应用框架,最全Android知识总结
2019-04-29
深入解析android核心组件和应用框架,社招面试心得
2019-04-29
深度解析跳槽从开始到结束完整流程,持续更新中
2019-04-29
深度解析跳槽从开始到结束完整流程,面试真题解析
2019-04-29
hashmap扩容过程,字节大神强推千页PDF学习笔记,经典好文
2019-04-29
kotlin面试题!Android大厂高频面试题解析,薪资翻倍
2019-04-29
kotlin面试题!一口气拿了9家公司的offer,已拿offer入职
2019-04-29
retrofit优点,互联网寒冬公司倒闭后,年薪50W
2019-04-29
retrofit原理面试,Android性能优化最佳实践,面试必备
2019-04-29
【工作感悟】Android多进程从头讲到尾,offer拿到手软
2019-04-29
【微信小程序】面试一路绿灯Offer拿到手软,好文推荐
2019-04-29
Android之内存泄漏调试学习与总结,分享PDF高清版
2019-04-29
事件分发机制怎么回答,Android开发究竟该如何学习,使用指南
2019-04-29
python3 语法注意
2019-04-29
C语言复习
2019-04-29