合并数据 - 方法总结(concat、append、merge、join、combine_first)- Python代码

描述

分析一个业务的时候往往涉及到很多数据,比如企业融资信息、投资机构信息、行业标签、招聘数据、政策数据等,这些数据分别存储在不同的表中。通过堆叠合并和主键合并等多种合并方式,可以将这些表中需要的数据信息合并在一张表中供分析使用。

合并方法

  1. 堆叠合并:横向堆叠,纵向堆叠;
  2. 主键合并;
  3. 重叠合并;

堆叠合并

堆叠合并就是简单的把两个表拼在一起,分为横向堆叠和纵向堆叠。

横向堆叠

横向堆叠就是指将后一个表的数据堆叠到前一个表的后几列,可以使用 concat 函数完成。

concat 函数基本语法

pd.concat(objs, axis=0, join='outer', join_axes=None, ignore_index=False,keys=None, levels=None, names=None, verify_integrity=False,copy=True)

objs:表示需要合并的表的组合[d1, d2],接收多个Series, DataFrame, Panel 的组合,无默认;

axis:默认为0,axis=0表示做列对齐,列名一致的话,将后表数据添加到前表的下几行;

                          axis=1表示做行对齐,行标签一致的话,将后表的数据添加到前表的后几列;

join:默认为outer,接收‘inner’或‘outer’,表示取交集或并集;

其他参数相对不是那么常用,有兴趣的可以参考:concat函数的常用参数及说明

Python代码

# -*- coding=utf-8 -*-
import pandas as pd
import numpy as np
from pandas import DataFrame,Series
import math#导入数据
eventfile = u'D:\\pythondata\\yuchuli\\event.xlsx'#投融资事件
event = pd.read_excel(eventfile)
event = DataFrame(event)eventbufile = u'D:\\pythondata\\yuchuli\\event_bu.xlsx'#投融资事件补充数据
event_bu = pd.read_excel(eventbufile)
event_bu = DataFrame(event_bu)#合并文件
event_1 = pd.concat([event, event_bu], axis = 1, join='outer', sort=False)
event_2 = pd.concat([event, event_bu], axis = 0, join='outer', sort=False)
event_3 = pd.concat([event, event_bu], axis = 1, join='inner', sort=False)
event_4 = pd.concat([event, event_bu], axis = 0, join='inner', sort=False)
print("原文件,左文件的大小:", event.shape)
print("原文件,右文件的大小:", event_bu.shape)
print("axis = 1, join='outer'合并后的文件大小:", event_1.shape, "--行数取并集1000,右文件添加到左文件的后几列")
print("axis = 0, join='outer'合并后的文件大小:", event_2.shape, "--列数取并集13,右文件添加到左文件的下几行")
print("axis = 1, join='inner'合并后的文件大小:", event_3.shape, " --行数取交集100,右文件添加到左文件的后几列")
print("axis = 0, join='inner'合并后的文件大小:", event_4.shape, "--列数取交集11,右文件添加到左文件的下几行")

输出结果: 

原文件,左文件的大小: (1000, 11)
原文件,右文件的大小: (100, 13)
axis = 1, join='outer'合并后的文件大小: (1000, 24) --行数取并集1000,右文件添加到左文件的后几列
axis = 0, join='outer'合并后的文件大小: (1100, 13) --列数取并集13,  右文件添加到左文件的下几行
axis = 1, join='inner'合并后的文件大小: (100, 24)  --行数取交集100, 右文件添加到左文件的后几列
axis = 0, join='inner'合并后的文件大小: (1100, 11) --列数取交集11,  右文件添加到左文件的下几行

所以,横向堆叠就是指 concat 函数的参数 axis = 1 的情况(右文件添加到左文件的后几列),至于是用 ‘inner’ 或 ‘outer’ ,就要视实际情况而定了,但是一般情况下是使用 outer ,通俗的讲,一般合并数据的人都不希望越合并越小了。

纵向堆叠

与横向堆叠相对的,纵向堆叠则是指将后一个表的数据堆叠到前一个表的下几行,也就是上述Python代码中 concat 函数的参数 axis = 0 的情况。除了 concat 函数,append 方法也可以实现纵向堆叠。

Python代码

# -*- coding=utf-8 -*-
import pandas as pd
import numpy as np
from pandas import DataFrame,Series#导入数据
eventfile = u'D:\\pythondata\\yuchuli\\event.xlsx'#投融资事件
event = pd.read_excel(eventfile)
event = DataFrame(event)eventbufile = u'D:\\pythondata\\yuchuli\\event_bu.xlsx'#投融资事件补充数据
event_bu = pd.read_excel(eventbufile)
event_bu = DataFrame(event_bu)#合并文件
event_1 = event.append(event_bu, sort=False)
event_2 = pd.concat([event, event_bu], axis = 0, join='outer', sort=False)
print("原文件,左文件的大小:", event.shape)
print("原文件,右文件的大小:", event_bu.shape)
print("append 方法合并后的文件大小:", event_1.shape)
print("axis = 0, join='outer'合并后的文件大小:", event_2.shape)

输出结果:

原文件,左文件的大小: (1000, 11)
原文件,右文件的大小: (100, 13)
append 方法合并后的文件大小: (1100, 13)
axis = 0, join='outer'合并后的文件大小: (1100, 13)

所以,append 方法对应的是 concat 函数中 axis = 0, join='outer' 的情况。


主键合并

主键合并就是指前后两个表按照一个或者多个键匹配的方式连接起来,一般是以某一或多列为键,匹配其他列,很类似 SQL 中的 join。pandas 库中的 merge 函数和 join 函数都可以实现主键合并,和 SQL 中的 join 一样, merge 函数和 join 函数也有左连接(left)、右连接(right)、内连接(inner)、外链接(outer)。

merge 函数不仅可以实现 SQL 中的 join 函数的全部功能,还可以在匹配的过程中对数据进行排序,通过其中的 sort 参数实现。

merge 函数基本语法

pd.merge(left, right, how='inner', on=None, left_on=None, right_on=None,left_index=False, right_index=False,sort=False,suffixes=('_x', '_y'), copy=True,indicator=False,validate=None)

left, right:分别表示需要匹配的左表和右表,可接收的数据类型为 DataFrame;

how:表示左右表的连接方式,默认为 inner ,可接收的取值为 left、right、inner、outer;

on:表示左右表的连接主键,两个表的主键名称一致的时候才可以使用 on 参数,不一致时需使用left_on,right_on参数, on 参数默认为None,可接收的数据类型为 str 或 sequence ;

left_on,right_on:分别表示左表和右表的连接主键,默认为None,可接收的数据类型为 str 或 sequence ;

sort:表示是否对合并后的数据进行排序,默认为False,可接收的数据类型为boolean ;

其他参数相对不是那么常用,有兴趣的可以参考:merge函数的常用参数及说明

join 函数基本语法

data1.join(data2, on=None,how='inner', lsuffix='', rsuffix='', sort=False)

join 函数与 merge 函数 不同之处在于,join 函数要求两个主键的名称必须相同。

Python代码

# -*- coding=utf-8 -*-
import pandas as pd
import numpy as np
from pandas import DataFrame,Series
import math#导入数据
eventfile = u'D:\\pythondata\\yuchuli\\event.xlsx'#投融资事件
event = pd.read_excel(eventfile)
event = DataFrame(event)
event['事件id'] = event['事件id'].astype('str')#主键转化成str格式institutionfile = u'D:\\pythondata\\yuchuli\\institution.xlsx'#事件id对应投资机构
institution = pd.read_excel(institutionfile)
institution = DataFrame(institution)
institution = institution.dropna()#去空值
institution = institution.drop_duplicates()#去重复值
institution['事件id'] = institution['事件id'].astype('str')#主键转化成str格式#合并文件
event_1 = pd.merge(event,institution, how='left', left_on='事件id', right_on='事件id')
event_2 = event.join(institution, on='事件id', how = 'left', rsuffix='1')print("原文件,左文件的大小:", event.shape)
print("原文件,右文件的大小:", institution.shape)
print("append 方法合并后的文件大小:", event_1.shape)
print("join  方法合并后的文件大小:", event_2.shape)

输出结果:

原文件,左文件的大小: (1000, 11)
原文件,右文件的大小: (48757, 2)
append 方法合并后的文件大小: (1178, 12)
join  方法合并后的文件大小: (1178, 12)


重叠合并

数据处理的过程中偶尔会出现同样一份数据存储在两张表中,单看两张表的话,哪一张的数据都不算全,但是如果将其中一个表的数据补充进另外一个表中,生成的这张新表则是相对完整的数据。这种方法就叫重叠合并,pandas 库中提供了 combine_first 方法来实现这一功能。

combine_first 函数基本语法

data1.combine_first(data2)

Python代码

# -*- coding=utf-8 -*-
import pandas as pd
import numpy as np
from pandas import DataFrame,Series
import math#导入数据
df1 = pd.DataFrame([[3, 1, 7], [3, 5, np.nan],[np.nan, np.nan, np.nan]])
df2 = pd.DataFrame([[9, np.nan, 4], [2, 1, 4]], index=[1, 2])#合并文件
df = df1.combine_first(df2)
print("合并前的df1:\n", df1)
print("合并前的df2:\n", df2)
print("combine_first 方法合并后的文件:\n", df)

输出结果:

合并前的df1:0    1    2
0  3.0  1.0  7.0
1  3.0  5.0  NaN
2  NaN  NaN  NaN合并前的df2:0    1  2
1  9  NaN  4
2  2  1.0  4combine_first 方法合并后的文件:0    1    2
0  3.0  1.0  7.0
1  3.0  5.0  4.0
2  2.0  1.0  4.0

over!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/475553.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

LeetCode 592. 分数加减运算(字符串+最大公约数)

1. 题目 给定一个表示分数加减运算表达式的字符串,你需要返回一个字符串形式的计算结果。 这个结果应该是不可约分的分数,即最简分数。 如果最终结果是一个整数,例如 2,你需要将它转换成分数形式,其分母为 1。 所以在…

18、Linux下编程风格

在前面曾总结过微软环境下编程的规范【1】,但是在linux下,没有自动补起,以及没有像VS那样高级好用的可视化开发工具,如果变量,函数定义太复杂,敲的也累,下面总结linux下编程风格,资料…

获取数据 - 将Excel文件读入矩阵matrix中 - Python代码

机器学习中,很多算法的计算逻辑是基于数学的,免不了求特征值和特征向量这种事情,因此,在数据预处理的时候,将数据源中的数据转储成矩阵格式是很有必要的。 原数据: 代码: import numpy as np…

LeetCode 713. 乘积小于K的子数组(滑动窗口)

1. 题目 给定一个正整数数组 nums。 找出该数组内乘积小于 k 的连续的子数组的个数。 示例 1: 输入: nums [10,5,2,6], k 100 输出: 8 解释: 8个乘积小于100的子数组分别为: [10], [5], [2], [6], [10,5], [5,2], [2,6], [5,2,6]。 需要注意的是 [10,5,2] 并不是乘积小于…

Visual Studio 2010 调试 C 语言程序

转:http://woyouxian.net/c/using_visual_studio_write_pure_ansi_c_program.html 本篇文章讲述如何用微软的 Visual Studio 编写纯C语言程序,这里的纯C语言,指的是 ANSI C 语言。 要在 Visual Studio 里创建一个 ANSI C语言程序,…

字符串处理 - DataFrame文本数据的量化 - Python代码

在数据建模的过程中,对于文本数据,比如婚姻情况、性别、居住地等。这给只接受数值型的模型造成了很大的干扰,因此在数据采集到数据建模的过程中,我们需要一个过程,叫量化。 比如这样一个源数据: 收入身高…

Silverlight 4之旅(三)数据绑定(中)

在上篇文章中我们已经看过了绑定的基础知识,以及绑定数据源的选择问题。在本篇文章中我们看下绑定时Target的现实的问题。 自定义显示 很多时候我们的DataSource存储的数据并不可以直接用来显示,比如说我们对于Bool类型,需要显示为“是”或则…

LeetCode 第 28 场双周赛(505/2144,前23.6%)

文章目录1. 比赛结果2. 题目1. LeetCode 5420. 商品折扣后的最终价格 easy2. LeetCode 5422. 子矩形查询 medium3. LeetCode 5423. 找两个和为目标值且不重叠的子数组 medium4. LeetCode 5421. 安排邮筒 hard1. 比赛结果 两题选手😂,前两题很水&#xf…

决策树模型 - (ID3算法、C4.5算法) - Python代码实现

目录 算法简介 信息熵(Entropy) 信息增益(Information gain) - ID3算法 信息增益率(gain ratio) - C4.5算法 源数据 代码实现 - ID3算法 代码实现 - C4.5算法 画决策树代码-treePlotter 算法简介 决策数(Decision Tree)在机器学习中也是比较常见的一种算法&#xff0c…

SGA介绍

以前一直看的马马虎虎,这次重新整理了下sga设置,组件等。当然这些涉及到了很多的参考,主要的参考的网址:http://www.hellodba.com/reader.php?ID104&langCNhttp://8xmax.blog.163.com/blog/static/1633631020084781125726/ h…

重复值处理 - 清洗 DataFrame 中的各种重复类型 - Python代码

目录 所有列是否完全重复 指定某一列是否重复 根据多列判断是否重复,防止误删数据 其他数据预处理方法 通过八爪鱼或者火车头等采集器从全网抓取的数据中,总会存在各种各样的重复数据,为保证数据在使用过程中的准确性,总要先进…

LeetCode 1480. 一维数组的动态和(前缀和)

1. 题目 给你一个数组 nums 。数组「动态和」的计算公式为:runningSum[i] sum(nums[0]…nums[i]) 。 请返回 nums 的动态和。 示例 1: 输入:nums [1,2,3,4] 输出:[1,3,6,10] 解释:动态和计算过程为 [1, 12, 123, …

bitmap 转 drawable

BitmapDrawable drawable new BitmapDrawable(bitmap); layout.setBackgroundDrawable(drawable);转载于:https://www.cnblogs.com/sode/archive/2011/08/10/2133799.html

机器学习与建模 - 聚类、分类、回归的区别

一句话概括: 1. 聚类:无监督学习,学习结果将产生几个集合,集合中的元素彼此相似; 2. 分类:有监督学习,学习结果将产生几个函数,通过函数划分为几个集合,数据对象是离散…

LeetCode 1481. 不同整数的最少数目(计数+排序+贪心)

1. 题目 给你一个整数数组 arr 和一个整数 k 。现需要从数组中恰好移除 k 个元素,请找出移除后数组中不同整数的最少数目。 示例 1: 输入:arr [5,5,4], k 1 输出:1 解释:移除 1 个 4 ,数组中只剩下 5 一…

Silverlight带关闭动画的内容控件,可移动的内容控件(一)

本例给大家介绍两个自定义控件&#xff0c;一个有显示和关闭两种状态&#xff0c;在状态切换时有动画效果。另外一个是可以拖动的内容控件&#xff0c;可以制作能拖动的面板。 A&#xff0e;带关闭动画的内容控件。 .xaml View Code <ResourceDictionary xmlns"htt…

模型评价 - 判断数据模型拟合效果的三种方法

数据建模的目的就是获得从自变量映射到因变量的函数&#xff0c;在建模的探索过程中&#xff0c;不同的方式总会得出不同的函数模型&#xff0c;而这些函数大多是由一些参数构成的&#xff0c;比如 y f&#xff08; x; w0, w1, w2, w3, ...&#xff09;。 平方损失函数 为了选…

Autodesk云计算系列视频 --- 云计算与Civil 3D

前面的视频介绍了云计算与AutoCAD/Revit/Inventor的结合&#xff0c;这一节是云计算与Civil 3D的结合例子&#xff1a; 演示中使用的云计算程序源代码可以从下面链接下载&#xff1a; The sample code used in the demonstration is available here. 转载于:https://www.cnblo…

模型评价 - 机器学习与建模中怎么克服过拟合问题?

上一篇博客链接&#xff1a; 机器学习与建模中 - 判断数据模型拟合效果的三种方法 在上一篇博客中&#xff0c;我们谈到了使用损失函数来判断模型的拟合效果。但是拟合效果比较好的模型不一定是最好的模型&#xff0c;建模的最终目的是为了预测&#xff0c;因此预测最精准的模…

LeetCode 957. N 天后的牢房(查找循环节)

1. 题目 8 间牢房排成一排&#xff0c;每间牢房不是有人住就是空着。 每天&#xff0c;无论牢房是被占用或空置&#xff0c;都会根据以下规则进行更改&#xff1a; 如果一间牢房的两个相邻的房间都被占用或都是空的&#xff0c;那么该牢房就会被占用。 否则&#xff0c;它就…