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 DataFrame

pandas 学习 第7篇:DataFrame - 数据处理(应用、操作索引、重命名、合并)的更多相关文章

  1. pandas学习(数据分组与分组运算、离散化处理、数据合并)

    pandas学习(数据分组与分组运算.离散化处理.数据合并) 目录 数据分组与分组运算 离散化处理 数据合并 数据分组与分组运算 GroupBy技术:实现数据的分组,和分组运算,作用类似于数据透视表 ...

  2. pandas 学习 第5篇:DataFrame - 访问数据框

    数据框是用于存储数据的二维结构,分为行和列,一行和一列的交叉位置是一个cell,该cell的位置是由行索引和列索引共同确定的.可以通过at/iat,或loc/iloc属性来访问数据框的元素,该属性后跟 ...

  3. pandas 学习 第2篇:Series -(创建,属性,转换和索引)

    序列(Series)是由一组数据(各种NumPy数据类型),以及一组与之相关的数据标签(索引)组成,序列不要求数据类型是相同的. 序列是一个一维数组,只有一个维度(或称作轴)是行(row),在访问序列 ...

  4. 一步步学习javascript基础篇(0):开篇索引

    索引: 一步步学习javascript基础篇(1):基本概念 一步步学习javascript基础篇(2):作用域和作用域链 一步步学习javascript基础篇(3):Object.Function等 ...

  5. pandas 学习 第6篇:DataFrame - 数据处理(长宽格式、透视表)

    长宽格式的转换 宽格式是指:一列或多列作为标识变量(id_vars),其他变量作为度量变量(value_vars),直观上看,这种格式的数据比较宽,举个列子,列名是:id1.id2.var1.var2 ...

  6. pandas 学习 第3篇:Series - 数据处理(应用、分组、滚动、扩展、指数加权移动平均)

    序列内置一些函数,用于循环对序列的元素执行操作. 一,应用和转换函数 应用apply 对序列的各个元素应用函数: Series.apply(self, func, convert_dtype=True ...

  7. Pandas 学习 第9篇:DataFrame - 数据的输入输出

    常用的数据存储介质是数据库和csv文件,pandas模块包含了相应的API对数据进行输入和输出: 对于格式化的平面文件:read_table() 对于csv文件:read_csv().to_csv() ...

  8. pandas DataFrame 数据处理常用操作

    Xgboost调参: https://wuhuhu800.github.io/2018/02/28/XGboost_param_share/ https://blog.csdn.net/hx2017/ ...

  9. pandas 学习 第8篇:Index 对象 - (创建、转换、排序)

    Index对象负责管理轴标签.轴名称等元数据,是一个不可修改的.有序的.可以索引的ndarry对象.在构建Sereis或DataFrame时,所用到的任何数据或者array-like的标签,都会转换为 ...

随机推荐

  1. Python 变量与运算符

    变量 基本概念: 1. 变量,名字,数据的唯一标识2.变量命名: 字母.数字.下划线: 不能以数字开头: 区分大小写: 不能使用保留字和关键字: 命名要有意义:(多个单词时,推荐使用下划线连接) 3. ...

  2. 《2019年小米春季上海 PHP 实习生招聘面试题》部分答案解析

    1 丶 Nginx 怎么实现负载均衡 这个还是比较简单 1.轮询 这种是默认的策略,把每个请求按顺序逐一分配到不同的 server,如果 server 挂掉,能自动剔除. 2.最少连接 把请求分配到连 ...

  3. 【Linux命令】磁盘分区,格式化,挂载命令,创建交换分区(fdisk,mkfs,mount,umount)

    友情链接 磁盘分区,格式化,挂载,创建交换分区:https://www.cnblogs.com/HeiDi-BoKe/p/11936998.html RAID工作级别:https://www.cnbl ...

  4. Python实战——基于股票的金融数据量化分析

    说明:本文只是通过自己的已学知识对股票数据进行了一个简单的量化分析,只考虑了收盘情况,真实的量化交易中仅仅考虑收盘情况是不够的,还有很多的复杂因素,而且仅仅三年数据是不足以来指导真实的股票交易的,因此 ...

  5. [算法]实现strStr()

    题目 实现 strStr() 函数. 给定一个 haystack 字符串和一个 needle 字符串,在 haystack 字符串中找出 needle 字符串出现的第一个位置 (从0开始).如果不存在 ...

  6. js|jq获取兄弟节点,父节点,子节点

    08.19自我总结 js|jq获取兄弟节点,父节点,子节点 一.js var parent = test.parentNode; // 父节点 var chils = test.childNodes; ...

  7. Java集合专题

    1.Java 中常用的容器有哪些? 常见容器主要包括 Collection 和 Map 两种,Collection 存储着对象的集合,而 Map 存储着键值对(两个对象)的映射表. Collectio ...

  8. MySQL基础之数据管理【4】

    外键约束的使用(只有InnoDB存储引擎支持外键) create table news_cate( id tinyint unsigned auto_increment key comment '编号 ...

  9. & 和 && 的区别,与(&)运算符、位移运算符(<< 、>>、>>>)的含义及使用(Java示例)

    & 和 && 的区别,与(&)运算符.位移运算符(<< .>>.>>>)的含义及使用(Java示例) 1. & 和 & ...

  10. Docker中进入容器命令行及后台运行

    Docker中我们一般会有两种执行命令的方式,一种是直接进入容器的命令行,在终端执行并查看结果,一种是在后台执行,并不会在终端查看结果. 1.进入容器命令行 su root docker run -i ...