【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 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:【pandas小记】pandas选择数据
下一篇:【pandas小记】pandas中易混淆的描述性统计

发表评论

最新留言

能坚持,总会有不一样的收获!
[***.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