【Python】merge:数据规整化:清理、转换、合并、重塑
merge:数据规整化:清理、转换、合并、重塑
目录:
文章目录
- @[toc]
- 一 合并数据集
- 1 数据库风格的DataFrame合并
- 2 索引上的合并
- 3 轴向连接
- 4 合并重叠数据
- 二 重塑和轴向旋转
- 1 重塑层次化索引
- 2 将“长格式”转换为“宽格式”
- 三 数据转换
- 1 移除重复数据
- 2 利用函数或映射进行数据转换
- 3 替换值
- 4 重命名轴索引
- 5 离散化和面元划分
- 6 检测和过滤异常值
- 7 排列和随机采样
- 8 计算指标/哑变量
- 四 字符串操作
- 1 字符串对象方法
- 2 正则表达式
- 3 pandas中矢量化的字符串函数
- 五 END
- 数据分析和建模方面的大量编程工作都是用在数据准备上的:加载、清理、转换以及重塑。pandas和python标准库提供了一组高级的、灵活的、高效的核心函数和算法。
一 合并数据集
- pandas.merge可根据一个或多个键将不同DataFrame中的行连接起来。SQL或其他关系型数据库对此思维应用比较常见。
- pandas.concat可以沿着一条轴将多个对象堆叠在一起。
- 实例方法combine_first可以将重复数据编接在一起,用一个对象中的值填充另一个对象中的缺失值。
1 数据库风格的DataFrame合并
- 数据集的合并(merge)或连接(join)运算是通过一个或多个键将行链接起来的。这些运算是关系型数据的核心。pandas的merge函数是对数据应用这些算法的主要切入点。
pd.merge(df1,df2,on = 'key')
pd.merge(df1,df2) #如果没有指定,merge会将重叠列的列名当做键,最好显示指定一下。
pd.merge(df1,df2,left_on = 'key1',right_on = 'key2' # 如果两个对象的列名不同,可以分别进行指定
- 默认情况下,merge做的是“inner”连接,结果中的键是交集。其他方式还有“left”、“right”、“outer”。外连接求取的是键的并集,组合了左连接和右连接的效果。
- 多对多的合并操作非常简单,无需额外的操作。多对多的连接产生 的是行的笛卡尔积,左边b行,右边a行,结果中就有a*b行。连接方式只影响出现在结果中的键。
- 要根据多个键进行合并,传入一个由列名组成的列表即可。结果中会出现哪些键的组合取决于所选的合并方式,也可以这样理解:多个键形成一系列元组,并将其当作单个连接键(实际上并不是这么回事)
- 合并运算需要考虑的最后一个问题是对重复列名的处理。虽然可以手动更改,但是merge有一个更实用的suffixes选项,用于指定附加到左右两个DataFrame对象的重叠列名上的字符串。
pd.merge(left,right,on = 'key'
pd.merge(left,right,on = 'key1',suffixes = ('_left','_right'))
- merge函数的参数:
- ① left # 用于合并的左侧DataFrame
- ② right # 用于合并的右侧DataFrame
- ③ how # “inner”、“outer”、“left”、‘“right”其中之一,默认为“inner”
- ④ on # 用于连接的列名
- ⑤ left_on、tight_on # 左右侧DataFrame分别指定键
- ⑥ left_index、right_index # 左右侧将索引用作连接键
- ⑦ sort# 合并后进行排序,默认为True,处理大数据时,最好禁用
- ⑧ suffixes # 字符串元组,用于追加到重叠列名的结尾,默认为“_x”、“_y”
- ⑨ copy # 默认为Flase,可以在某种特殊情况下禁用,默认总是复制。
2 索引上的合并
- 有时候,DataFrame中的连接键位于其索引中,这种情况下,可以传入left_index、right_index = True,或两个都传以说明索引应该被用作连接键。
- 对于层次化索引的数据,必须以列表的形式指明用作合并键的多个列(注意对重复索引值的处理),同时使用合并双方的索引也没问题。
pd.merge(lefth,righth,left_on = ['key1','key2'],right_index = True)
DataFrame还有一个join实例方法,可以更为方便地实现按索引合并。还可以用于合并多个带有相同或相似索引的DataFrame对象,而不管它们有没有之间有没有重叠的列。
3 轴向连接
- 另一种数据合并运算也被称作连接(concatenation)、绑定(binding)或堆叠(stacking)。Numpy有一个用于合并原始Numpy数组的concatenation函数。
- pandas的concat函数提供了一种能够解决用于连接的轴、对结果对象中的分组,因索引不同造成的交并集结果等问题。
- concat函数的参数:
- ① objs # 参与连接的pandas对象,唯一必要的参数
- ② axis # 指明连接的轴向,默认为0
- ③ join # “inner”、“outer”其中之一,默认为“outer”
- ④ koin_axes # 指明用于其他N-1条轴的索引,不执行交并集运算
- ⑤keys 与连接对象有关的值,用于形成连接轴向上的层次化索引
- ⑥ levels # 指定用作层次化索引各级别上的索引
- ⑦ names # 用于创建分层级别的名称
- ⑧ verify_integrity # 检查结果对象新轴上的重复情况。默认允许(Flase)
- ⑨ ignore_index # 不保留连接轴上的索引,产生一组新的索引range
4 合并重叠数据
- 还有一种数据组合问题不能简单的用合并和连接运算来处理。
- Numpy的where函数,用于表达一种矢量化的if-elif-else
- Series的combine_first方法,实现相同的功能,而且会进行数据对齐
二 重塑和轴向旋转
- 有许多用于重新排列表格型数据的基础运算。这些函数也称作重塑(reshape)或轴向旋转(pivot)运算。
1 重塑层次化索引
- 层次化索引为DataFrame数据的重排任务提供了一种具有良好一致性的方式。主要功能有二:
- stack:将数据的列“旋转”为行
- unstack:将数据的行“旋转”为列
data.stack()
data.stack.unstack()
- 使用stack方法可得到一个Series,对于一个层次化的Series,unstack的方式,可以得到一个DataFrame
- 默认情况下,stack和unstack操作的都是最内层,传入分层级别的编号或名称即可对其他级别进行unstack操作。
- 如果不是所有级别值都能在分组中找到,则返回缺失值
- stack默认过滤缺失值,运算可逆
- 对DataFrame进行unstack操作时,作为旋转轴的级别将会成为结果中的最低级别。
2 将“长格式”转换为“宽格式”
- 时间序列数据通常是以所谓的“长格式”或“堆叠格式”存储在数据库和CSV中的,关系型数据库中的数据尤其如此。
- 一方面保存数据的完整性,
- 另一方面便于查询支持。
- 但缺点是长格式的数据操作起来不轻松,可以用DataFrame中的pivot方法实现这个转换。
pivoted = ldata.pivot('date','item','value')
- 前两个参数分别用作行和列索引的列名,最后一个参数值则是用于填充DataFrame的数据列的列名。
- 如果有两个需要重塑的数据列或者忽略最后一个参数,返回的都是层次化的列。
- pivot只是一个快捷方式,用set_index创建层次索引,再用unstack重塑。
三 数据转换
- 数据不仅需要重排,也需要过滤、清理以及其他的转换等工作。
1 移除重复数据
- duplicates() 返回一个布尔型的Series,表示各行是否是重复行
- drop_duplicates() 返回一个移除了重复行的DataFrame
- 这两个方法默认会判断全部列,也可以指定部分列进行重复项判断。
- duplicates() 和drop_duplicates() 默认保留第一个出现的值组合,传入take_last = True则保留最后一个。
2 利用函数或映射进行数据转换
- Series的map方法可以接受一个函数或含有映射关系的字典对象,map是一宗实现元素级转换以及其他数据清理工作的便捷方式。
3 替换值
- 利用fillna方法填充缺失数据可以看做值替换的一种特殊情况,虽然map可以修改对象的数据子集,但replace提供了一种跟简单、更灵活的方式。
data.replace(a,'b')
data.replace(['a','c'],'b')
data.replace(['a','c'],['b','d'])
- 传入的参数也可以是字典。
4 重命名轴索引
跟Series一样,轴标签也可以通过函数或映射进行转换,从而得到一个新对象。轴还可以就地被修改,而无需新建一个数据结构。
data.index.map(str.upper)
- 如果想要创建数据集的转换版(而不是修改原始数据),比较实用的方法是rename
data.rename(index = str.title,columns = str.upper) # 可以结合字典对象
5 离散化和面元划分
- cut函数
- 为了便于分析,连续数据常常被离散化或拆分为“面元”。要实现这个功能,需要pandas的cut函数
- pandas返回的是一个特殊的Categorical对象。可以将其看作一组表示面元名称的字符串,含有一个表示不同分类名称的levels数组以及一个为年龄数据进行标号的labels的属性。
- 跟区间的符号一样,圆括号表示开端,方括号表示闭端,哪边是闭端可以通过tight = Flase控制。
- 如果向cut传入的面元的数量而不是确切的面元边界,则它会根据最小值和最大值计算一个等长面元,均匀分组。
ages = [20,22,25,27,21,23,37,23,23,54,26,29]
bins = [18,25,35,60,100]
cats = pd.cut(ages,cuts)
cats
cats.labels
cats.levels
pd.cut(data,4,precision = 2)
- qcut函数
- qcut是一个非常类似于cut的函数,它可以根据样本分位数对数据进行面元划分,可以设置自定义的分位数(0~1之间,包含端点)
6 检测和过滤异常值
data[data['a'] >= 2].any(1)
data[data['a'] == 2] = 3
7 排列和随机采样
- 利用numpy.random.permutation函数实现对Series和DataFrame的列的排列工作。
8 计算指标/哑变量
- 另一种常用于统计建模或机器学习的转换方式为:将分类变量转换为“哑变量”或“指标矩阵”
四 字符串操作
1 字符串对象方法
- Python内置的字符串方法
- count # 返回子串在字符串中的出现次数
- endswith/startswith # 如果字符串以某个后缀结尾或某个前缀开头,返回True
- join # 将字符串用作连接到其他字符串序列的分隔符
- index # 如果在字符串中找到子串,则返回子串第一个字符所在的位置
- find # 如果在字符串中找到子串,则返回第一个发现的子串第一个字符所在的位置
- rfind # 如果在字符串中找到子串,则返回第一个发现的子串最后一个字符所在的位置
- replace # 用另一个字符串替换指定字符串
- strip、strip、lstrip # 去除空白符(包括换行符)
- split # 通过指定的分隔符将字符串拆分为一组子串
- lower、upper # 分别将字母字符转换为大小写
- ljust、rjust # 用空格填充字符串的空白侧 以返回符合最低宽度的字符串
2 正则表达式
3 pandas中矢量化的字符串函数
五 END
【Python】merge:数据规整化:清理、转换、合并、重塑相关推荐
- Python之数据规整化:清理、转换、合并、重塑
Python之数据规整化:清理.转换.合并.重塑 1. 合并数据集 pandas.merge可根据一个或者多个不同DataFrame中的行连接起来. pandas.concat可以沿着一条轴将多个对象 ...
- 数据规整化:清理、转换、合并、重塑 《用Python进行数据分析》读书笔记第7章
数据规整化:清理.转换.合并.重塑 第7章 合并数据集 pandas.merge可以根据一个或多个键将不同DataFrame中的行连接起来. pandas.concat可以沿着一条轴将多个对象堆叠到一 ...
- 类的应用python平均分_【数据科学系统学习】Python # 数据分析基本操作[四] 数据规整化和数据聚合与分组运算...
本篇内容为整理<利用Python进行数据分析>,博主使用代码为 Python3,部分内容和书本有出入. 在前几篇中我们介绍了 NumPy.pandas.matplotlib 三个库的基本操 ...
- Python数据分析学习系列 八 数据规整:聚合、合并和重塑
Python数据分析学习系列 八 数据规整:聚合.合并和重塑 资料转自(GitHub地址):https://github.com/wesm/pydata-book 有需要的朋友可以自行去github下 ...
- 3.4 利用Pandas进行数据清洗和数据规整化
本文章是3.4.3.5的内容,如果想要源代码和数据可以看以下链接: https://download.csdn.net/download/Ahaha_biancheng/83338868 文章目录 3 ...
- python数据分析第七章实训3_《利用python进行数据分析》读书笔记--第七章 数据规整化:清理、转换、合并、重塑(二)...
3.数据转换 介绍完数据的重排之后,下面介绍数据的过滤.清理.以及其他转换工作. 去重 #-*- encoding: utf-8 -*- importnumpy as npimportpandas a ...
- 利用Python进行数据分析--数据规整化:清理、转换、合并、重塑
转载自:http://blog.csdn.net/ssw_1990/article/details/26565069 1.数据转换 目前为止介绍的都是数据的重排.另一类重要操作则是过滤.清理以及其他的 ...
- Anonympy——使用Python进行数据匿名化
目录 介绍 背景 使用代码 兴趣点 GitHub存储库 介绍 我们的世界充斥着数字数据.2.5万亿字节是每天产生的数据量.大多数时候,数据是个人的和敏感的,与它相关的人不想透露它.个人和敏感数据的一些 ...
- 利用python进入数据分析之数据规整化:清理、转换、合并、重塑(二)
数据转换 移除重复数据 In [106]: data = DataFrame({'k1': ['one'] * 3 + ['two'] * 4,'k2': [1, 1, 2, 3, 3, 4, 4]} ...
最新文章
- 米家电磁炉显示e10_小米“米家电磁炉C1”评测:7挡火力,2100W大功率设计
- 如何从头开始构建自己的Linux Dotfiles Manager
- Android移动端音视频的快速开发教程(十)
- decimal(C# 参考)
- python怎么安装pip-安装 Python 模块
- sizeof(函数名)=?
- Python3 注释
- 前端学习(652):运算符导读
- Theano 中文文档 0.9 - 7.2.2 更多示例
- org.neo4j.kernel.StoreLockException: Store and its lock file has been locked by another process
- metamask插件_Remix+metamask+myetherwallet+Ciper 完成主网发币(实战 十)
- first network error, wait for 15 seconds
- SDL_BlitSurface的参数是两个PNG时,如何保护其透明度
- [Angular Tutorial] 3-Components
- 主编编辑器如何绑定公众号?
- 三个三维矢量叉乘公式(拉格朗日矢量公式)推导(非坐标法)
- Linux 4G模块pppd拨号上网脚本解析
- html如何制作图片平移的效果,抖音里单张图片平移视频怎么制作?影音制作实现一张图片从左到右滑动视频效果...
- 【新知实验室】TRTC视频会议
- 打印代码执行所耗费时间--毫秒
热门文章
- android view强制重绘_android view 相关方法 layout draw 布局 重绘 | 学步园
- win命令安装 安装cmake_win10下VSCode+CMake+Clang+GCC环境搭建教程图解
- vim 使用 surround 批量添加 引号
- mac mysql premium_详解 Navicat Premium Mac 版常用功能
- mysql 浏览器可视窗口_浏览器窗口的可视区域大小指的是哪里?
- 江苏信息考试access_2016年江苏省信息技术学业水平测试Access操作题
- windows下的eclipse运行hdfs程序时报错 (null) entry in command string: null chmod 0644【笔记自用】
- Leetcode(20210412-20210418 第一周 每日一题)
- 报错解决方案:ERROR: Cython.Build.cythonize not found.
- (建议收藏)matlab在线性代数问题中的计算机求解进阶问题及解决方案集锦