pandas 学习 第7篇:DataFrame - 数据处理(应用、操作索引、重命名、合并)
DataFrame的这些操作和Series很相似,这里简单介绍一下。
一,应用和应用映射
apply()函数对每个轴应用一个函数,applymap()函数对每个元素应用一个函数:
- DataFrame.apply(self, func, axis=0, raw=False, result_type=None, args=(), **kwds)
- DataFrame.applymap(self, func)
定义一个函数fun,使用apply()函数把fun应用到由DataFrame对象的列构成的一维数组上,通常fun函数是由聚合函数构成的。
- f=lambda x: x.max()-x.min
- df.apply(f)
定义一个函数foo,使用applymap()函数把函数foo应用于DataFrame对象的各个元素上,
- foo=lambda x: '%.2f' % x
- df.applymap(foo)
转换数据,调用函数对循环对数据元素进行处理:
- DataFrame.transform(self, func, axis=0, *args, **kwargs)
二,操作索引
操纵索引包括:重索引、设置索引、替换轴的索引、重置索引
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)
参数注释:
- labels:array-like,新的轴(axis)标签,轴由参数axis指定
- index,columns:新索引,如果指定index参数,等价于指定labels和axis=0/'index',如果指定columns,等价于指定labels和axis=1/'columns'
- axis:轴,axis=0/'index'表示行,axis=1/'columns'表示列
- method:用于填充的方法,有效值是None, ‘backfill’/’bfill’, ‘pad’/’ffill’, ‘nearest’,
- None表示不会填充
- ‘backfill’/’bfill’:表示回填,用NA的后面第一个有效值来填充当前的NA
- ‘pad’/’ffill’:表示补填,用前面第一个有效值来填充当前的NA
- ‘nearest’:用最接近NA的有效值来填充当前的NA
- copy:默认值是True,返回新的对象
- level:用于MultiIndex,在一个级别上,与MultiIndex进行匹配。
- fill_value:标量值,默认值是np.NaN,用于对缺失值进行填充的值
- limit:填充的最大次数
- tolerance:可选参数,表示不能完全匹配的原始标签和新标签之间的最大距离,匹配位置处的索引值满足:abs(index_position - target_position)<= tolerance,容差可以是标量值(对所有序列值应用相同的容差),也可以是list-like结构(对每个序列元素应用可变容差),list-like结构包括列表、元组、数组和序列,并且list-like结构的长度和序列的长度和长度必须相同。
2、设置索引
设置索引,可以使用set_index()函数把已有的列转换为行索引,也可以使用set_axis()函数替换掉已有的轴索引。使用现有的列作为DataFrame的索引:
- DataFrame.set_index(self, keys, drop=True, append=False, inplace=False, verify_integrity=False)
参数注释:
- keys:列标签,或列标签的列表,
- drop:默认值是True,表示删除keys参数指定的列;设置为False,表示不删除keys参数指定的列。
- append:默认值是False,表示删除原始行索引;如果设置为True,表示向现有的行索引中追加索引。
- verify_integrity:默认值是False,不检查新索引是否存在重复值。
3,替换轴的索引
把给定的轴的索引替换为新索引:
- DataFrame.set_axis(self, labels, axis=0, inplace=None)
参数注释:
- labels:新索引的值
- axis:{0 or ‘index’, 1 or ‘columns’}, default 0,指定用于更新的轴
- inplace:是否原地更新
使用新的索引来替换原始的行索引:
- >>> df = pd.DataFrame({"A": [1, 2, 3], "B": [4, 5, 6]})
- >>> df.set_axis(['a', 'b', 'c'], axis='index', inplace=False)
- A B
- a 1 4
- b 2 5
- c 3 6
4,重置索引
重置索引表示把DataFrame的索引设置为默认值,也就是从0开始到N-1的整数位置索引。设置索引是把列转换为索引,而重置索引可以认为是把索引转换为列,对于单级别的索引,常用的参数有:
- DataFrame.reset_index(self, drop=False, inplace=False,...)
drop 参数表示是否删除原始索引,如果设置为False,那么索引转换为列;如果设置为True,表示把索引删除。
举个例子,对于以下数据框,索引是行标签:
- >>> df = pd.DataFrame([('bird', 389.0),
- ... ('bird', 24.0),
- ... ('mammal', 80.5),
- ... ('mammal', np.nan)],
- ... index=['falcon', 'parrot', 'lion', 'monkey'],
- ... columns=('class', 'max_speed'))
- >>> df
- class max_speed
- falcon bird 389.0
- parrot bird 24.0
- lion mammal 80.5
- monkey mammal NaN
对数据框重置索引,把原始索引的值转换为数据框的一列,并添加一个新的整数位置索引。
- >>> df.reset_index()
- index class max_speed
- 0 falcon bird 389.0
- 1 parrot bird 24.0
- 2 lion mammal 80.5
- 3 monkey mammal NaN
三,重命名轴
对列名或行标签重命名,可以使用rename()和rename_axis()函数
- DataFrame.rename(self, mapper=None, index=None, columns=None, axis=None, copy=True, inplace=False, level=None, errors='ignore')
- DataFrame.rename_axis(self, mapper=None, index=None, columns=None, axis=None, copy=True, inplace=False)
对于rename()函数, 参数 mapper 可以是dick-like 结构,也可以是函数,举个例子,把DataFrame对象的列名由Timestamp类型转换为字符串类型:
- df.rename(mapper =lambda x: pd.to_datetime(x).strftime('%Y%m%d') if x != 'na_count' else x, axis=1)
四,合并数据
DataFrame的合并(Merge)运算是通过一个或多个键把行连接起来,和关系型数据库的Join操作相同,但是DataFrame的合并只支持等值条件的合并:
- DataFrame.merge(self, right, how='inner', left_on=None, right_on=None, left_index=False, right_index=False,
sort=False, suffixes=('_x', '_y'), copy=True)
参数注释:
- right:合并的右表
- how:指定连接的类型,有效值是inner、outer、left、right,用于指定内连接、full outer、左外、右外连接:
- left_on,right_on:分别用于指定连接的列,当在对应的列上值相同时,两个表合并的条件成立。
- left_index,right_index:指定索引作为连接条件
- sort:根据连接键对合并后的数据进行排序
- suffixes:用于为重名的列指定后缀,默认值是('_x','_y')
- copy:把数据复制到结果中
参考文档:
pandas 学习 第7篇:DataFrame - 数据处理(应用、操作索引、重命名、合并)的更多相关文章
- pandas学习(数据分组与分组运算、离散化处理、数据合并)
pandas学习(数据分组与分组运算.离散化处理.数据合并) 目录 数据分组与分组运算 离散化处理 数据合并 数据分组与分组运算 GroupBy技术:实现数据的分组,和分组运算,作用类似于数据透视表 ...
- pandas 学习 第5篇:DataFrame - 访问数据框
数据框是用于存储数据的二维结构,分为行和列,一行和一列的交叉位置是一个cell,该cell的位置是由行索引和列索引共同确定的.可以通过at/iat,或loc/iloc属性来访问数据框的元素,该属性后跟 ...
- pandas 学习 第2篇:Series -(创建,属性,转换和索引)
序列(Series)是由一组数据(各种NumPy数据类型),以及一组与之相关的数据标签(索引)组成,序列不要求数据类型是相同的. 序列是一个一维数组,只有一个维度(或称作轴)是行(row),在访问序列 ...
- 一步步学习javascript基础篇(0):开篇索引
索引: 一步步学习javascript基础篇(1):基本概念 一步步学习javascript基础篇(2):作用域和作用域链 一步步学习javascript基础篇(3):Object.Function等 ...
- pandas 学习 第6篇:DataFrame - 数据处理(长宽格式、透视表)
长宽格式的转换 宽格式是指:一列或多列作为标识变量(id_vars),其他变量作为度量变量(value_vars),直观上看,这种格式的数据比较宽,举个列子,列名是:id1.id2.var1.var2 ...
- pandas 学习 第3篇:Series - 数据处理(应用、分组、滚动、扩展、指数加权移动平均)
序列内置一些函数,用于循环对序列的元素执行操作. 一,应用和转换函数 应用apply 对序列的各个元素应用函数: Series.apply(self, func, convert_dtype=True ...
- Pandas 学习 第9篇:DataFrame - 数据的输入输出
常用的数据存储介质是数据库和csv文件,pandas模块包含了相应的API对数据进行输入和输出: 对于格式化的平面文件:read_table() 对于csv文件:read_csv().to_csv() ...
- pandas DataFrame 数据处理常用操作
Xgboost调参: https://wuhuhu800.github.io/2018/02/28/XGboost_param_share/ https://blog.csdn.net/hx2017/ ...
- pandas 学习 第8篇:Index 对象 - (创建、转换、排序)
Index对象负责管理轴标签.轴名称等元数据,是一个不可修改的.有序的.可以索引的ndarry对象.在构建Sereis或DataFrame时,所用到的任何数据或者array-like的标签,都会转换为 ...
随机推荐
- 201871010116-祁英红《面向对象程序设计(java)》第十七周学习总结
博文正文开头格式:(2分) 项目 内容 <面向对象程序设计(java)> https://home.cnblogs.com/u/nwnu-daizh/ 这个作业的要求在哪里 https:/ ...
- 在vue-cli3中使用axios获取本地json
在vue-cli3中,公共文件夹由static变成了public 先把要访问的json放到public文件夹下 使用axios的get方法获取,不能用post,不然会报404 axios..json` ...
- angularjs link compile与controller的区别详解,了解angular生命周期
壹 ❀ 引 我在 angularjs 一篇文章看懂自定义指令directive 一文中简单提及了自定义指令中的link链接函数与compile编译函数,并说到两者具有互斥特性,即同时存在link与c ...
- 【Unity游戏开发】接入UWA_GOT的iOS版SDK以后无法正常出包
一.正文 问: RT,最近有看到UWA_GOT工具新增了iOS版本的支持,于是下载了最新的工具包进行了接入测试.是按照文档直接将UWA_GOTv2.0.1_iOS.unitypackage导入进了Un ...
- Kafka简明教程
作者:柳树之 www.jianshu.com/p/7b77723d4f96 Kafka是啥?用Kafka官方的话来说就是: Kafka is used for building real-time d ...
- Winform中使用DevExpress的CheckEdit控件实现多选条件搜索
场景 Winform控件-DevExpress18下载安装注册以及在VS中使用: https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/details/1 ...
- JMeter压测“java.net.SocketException: Socket closed”解决方法
报错详情: java.net.SocketException: Socket closed at java.net.SocketInputStream.socketRead0(Native Metho ...
- SSH框架之Hibernate第四篇
Hibernate中有两套实现数据库数据操作的方式 : hibernate前3天讲解的都是 : hibernate自己的操作方式(纯XML配置文件的方式) 另一种方式是基于JPA的操作方式(通过注解的 ...
- 网络协议 3 - 物理层 和 MAC 层
在上一篇博文中,我们见证了 IP 地址的诞生,机器一旦有了 IP,就可以在网络的环境里和其他的机器展开沟通了. 今天,我们来认识下 物理层 和 MAC 层. 日常生活中,身为 90 后 ...
- 7.智能快递柜(APP及微信公众号)
1.智能快递柜(开篇) 2.智能快递柜(终端篇) 3.智能快递柜(通信篇-HTTP) 4.智能快递柜(通信篇-SOCKET) 5.智能快递柜(通信篇-Server程序) 6.智能快递柜(平台篇) 7. ...