【pandas 小记】rename、reindex、set_index
发布日期:2021-06-28 20:45:44
浏览次数:3
分类:技术文章
本文共 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 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!
发表评论
最新留言
初次前来,多多关照!
[***.217.46.12]2024年04月07日 09时57分21秒
关于作者
喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
phpqrcode生成二维码及使用方法
2019-04-29
php获取指定日期的上一个月和下一个月的日期
2019-04-29
jsp脚本、jsp表达式、jsp声明三者的区别。
2019-04-29
python网页解析器
2019-04-29
linux安装svn并设置自启动
2019-04-29
svn常用命令
2019-04-29
python2网页采集案例
2019-04-29
svn的服务端配置
2019-04-29
python3 urllib和requests模块
2019-04-29
Axure常见的几种原型图
2019-04-29
svn的checkout与export的区别与使用
2019-04-29
js实现点击复制功能
2019-04-29
phpquery采集案例
2019-04-29
jsp内置对象request的常用方法
2019-04-29
javascript 0和-0
2019-04-29
jsDelivr使用小记
2019-04-29
AJAX_ Asynchronous JavaScript and XML
2019-04-29
Vue_基本入门
2019-04-29
Java(1)
2019-04-29
Java(2)
2019-04-29