一文搞懂Python中Pandas数据合并
作者:Dream丶Killer 发布时间:2023-03-21 13:28:56
数据合并是数据处理过程中的必经环节,pandas作为数据分析的利器,提供了四种常用的数据合并方式,让我们看看如何使用这些方法吧!
1.concat()
concat()
可用于两个及多个 DataFrame
间行/列方向进行内联或外联拼接操作,默认对行(沿 y
轴)取并集。
使用方式
pd.concat(
objs: Union[Iterable[~FrameOrSeries], Mapping[Union[Hashable, NoneType], ~FrameOrSeries]],
axis=0,
join='outer',
ignore_index: bool = False,
keys=None,
levels=None,
names=None,
verify_integrity: bool = False,
sort: bool = False,
copy: bool = True,
)
主要参数
objs
:一个序列或是Series,DataFrame对象的映射。axis
:连接的轴,0(‘index',行),1(‘columns',列),默认为0。join
:连接方式 ,inner(交集), outer(并集),默认为outer。ignore_index
:是否重置串联轴的索引值。如果为True,则重置索引为0,…, n - 1。keys
:创建层次化索引。可以是任意值的列表或数组、元组数组、数组列表(如果将levels设置成多级数组的话)names
:生成的分层索引中级别的名称。
示例
创建两个 DataFrame
。
df1 = pd.DataFrame(
{'char': ['a', 'b'],
'num': [1, 2]})
df2 = pd.DataFrame(
{'char': ['b', 'c'],
'num': [3, 4]})
concat()
默认会对行方向进行拼接操作,连接方式 outer
。
pd.concat([d1, d2])
清除现有索引并重置索引。
pd.concat(
[d1, d2],
ignore_index=True)
通过 keys
参数在数据的最外层添加分层索引。
pd.concat(
[d1, d2],
keys=['d1', 'd2'])
指定 names
参数来标记创建的索引键。
pd.concat(
[d1, d1],
keys=['d1', 'd2'],
names=['DF Name', 'Row ID'])
将两个 DataFrame
与重叠的列进行组合并返回所有内容。 交集外的列填充 NaN
。
df3 = pd.DataFrame(
{'char': ['b', 'c'],
'float': [3.0, 4.0]})
pd.concat([df1, df3])
将两个 DataFrame
与重叠的列进行组合,只返回重叠列的内容。
pd.concat(
[df1, df3],
join="inner")
指定 axis=1
沿 x 轴水平组合 DataFrame
对象。
df4 = pd.DataFrame(
{'char': ['b', 'c', 'd'],
'num': [3, 4, 5]},
index=range(1, 4))
pd.concat([df1, df4], axis=1)
2.merge()
merge()
只能用于两个 DataFrame
间列方向进行内联或外联合并操作,默认列合并(沿 x
轴),取交集(即:以两个 DataFrame
列名的交集作为连接键)
使用方式
pd.merge(
left,
right,
how: str = 'inner',
on=None,
left_on=None,
right_on=None,
left_index: bool = False,
right_index: bool = False,
sort: bool = False,
suffixes=('_x', '_y'),
copy: bool = True,
indicator: bool = False,
validate=None,
)
参数
left
:DataFrameright
:DataFrame 或者带有 name 的Serieshow
:{‘left', ‘right', ‘outer', ‘inner'}, 默认为 ‘inner',连接的方式on
:用于连接的列索引名称,必须同时存在于左、右两个DataFrame中,默认是以两个DataFrame列名的交集作为连接键。left_on
:左侧DataFrame中用于连接键的列名,这个参数在左右列名不同但代表的含义相同时非常有用;right_on
:右侧DataFrame中用于连接键的列名left_index
:默认为False,不使用左侧DataFrame中的行索引作为连接键(但是这种情况下最好用JOIN)right_index
:默认为False,不使用右侧DataFrame中的行索引作为连接键( 但是这种情况下最好用JOIN)sort
:默认为False,将合并的数据进行排序,设置为False可以提高性能suffixes
:字符串值组成的元组,用于指定当左右DataFrame存在相同列名时在列名后面附加的后缀名称,默认为('_x', ‘_y')copy
:默认为True,总是将数据复制到数据结构中,设置为False可以提高性能indicator
:显示合并数据中数据的来源情况validate
:{“one_to_one” or “1:1”, “one_to_many” or “1:m”, “many_to_one” or “m:1”, “many_to_many” or “m:m”}如果指定,则检查合并是否为指定类型。
示例
创建两个DataFrame
。
df1 = pd.DataFrame(
{'name': ['A1', 'B1', 'C1'],
'grade': [60, 70, 80]})
df2 = pd.DataFrame(
{'name': ['B1', 'C1', 'D1'],
'grade': [70, 80, 100]})
merge()
默认情况下,会根据两个 DataFrame
中同时存在的列进行合并,合并方法采用取交集的方式。
df1.merge(df2)
指定合并的方式为 outer
,取并集。
df1.merge(df2, how='outer')
下面再创建两个 DataFrame
。
df1 = pd.DataFrame(
{'name1': ['A1', 'B1', 'B1', 'C1'],
'grade': [60, 70, 80, 90]})
df2 = pd.DataFrame(
{'name2': ['B1', 'C1', 'D1', 'E1'],
'grade': [70, 80, 90, 100]})
根据 name1
和 name2
列合并 df1
和 df2
。 grade
列附加了默认后缀 _x
和 _y
。
df1.merge(
df2,
left_on='name1',
right_on='name2')
合并 df1
和 df2
,并将指定的左右后缀附加到重叠列末尾。
df1.merge(
df2,
left_on='name1',
right_on='name2',
suffixes=('_1', '_2'))
3.append()
append()
可用于两个及多个 DataFrame
间行方向(沿 y
轴)的拼接操作,默认取并集。
使用方式
df1.append(
other,
ignore_index=False,
verify_integrity=False,
sort=False)
参数
other
: 指定要添加的数据。DataFrame 或 Series 对象,或这些对象的列表ignore_index
: 是否忽略索引,如果为 True,轴将被重置为 0, 1, …, n - 1。默认为Falseverify_integrity
:如果为 True,则在创建具有重复项的索引时引发 ValueError。默认为 Falsesort
: 如果 df1 和 other 的列未对齐,则对列进行排序。默认为 False。
示例
创建两个 DataFrame
。
df1 = pd.DataFrame(
[[1, 2], [3, 4]],
columns=list('AB'))
df2 = pd.DataFrame(
[[5, 6], [7, 8]],
columns=list('BC'))
append()
在默认情况下会沿y轴垂直拼接两个 DataFrame
,df1
,df2
交集外的列填充 NaN
。
df1.append(df2)
将 ignore_index
设置为 True,来达到重置轴的索引。
df1.append(df2, ignore_index=True)
4.join()
join()
用于两个及多个 DataFrame
间列方向(沿 x
轴)的拼接操作,默认左拼接。
使用方式
df1.join(
other,
on=None,
how='left',
lsuffix='',
rsuffix='',
sort=False)
other
:指定要添加的数据。DataFrame 或 Series 对象,或这些对象的列表on
:连接的列,默认使用索引连接how
:{‘left', ‘right', ‘outer', ‘inner'}, 默认为 ‘left',连接的方式lsuffix
:默认为空字符串,表示df1中重复列的后缀rsuffix
:other中重复列的后缀sort
:按照字典顺序对结果在连接键上排序。如果为False,连接键的顺序取决于连接类型(关键字)。
示例
创建两个 DataFrame
。
df1 = pd.DataFrame(
{'A': ['A0', 'A1', 'A2', 'A3', 'A4'],
'val': ['V0', 'V1', 'V2', 'V3', 'V4']})
df2 = pd.DataFrame(
{'B': ['B3', 'B4', 'B5'],
'val': ['V3', 'V4', 'V5']})
如果我们想使用 val
列进行连接,我们需要将 val
设置为 df1
和 df2
中的索引。
df1.set_index('val').join(
df2.set_index('val'))
使用 val
列连接的另一个方法是指定 on
参数。 df1.join
只能使用 df2
的索引,但可以使用 df1
中的任何列。所以可以只将 df2
中的 val
列转为索引,并通过 on
参数指定 df1
的连接列为 val
。
df1.join(
df2.set_index('val'),
on='val')
使用外连接的方式连接 df1
,df2
df1.join(
df2.set_index('val'),
on='val',
how='outer')
四种方法总结 concat()
可沿任意轴连接 Pandas
对象,并且可在串联轴上添加一层分层索引join()
主要用于基于行索引进行列的拼接merge()
使用数据库样式的连接合并,连接是基于列或索引。一般情况下 append()
, join()
可以看成是 concat()
与 merge()
的简易版,参数较少,易用性比较强。
来源:https://blog.csdn.net/qq_43965708/article/details/121505083


猜你喜欢
- 参数strSQL 要导出的SQL查询语句strFields 字段名称列表,如果为空字符,则使用SQL语句中的字段名用法示例:1:export
- 下面通过图文并茂的方式展示如下:一、SQL Profiler 事件类 Stored Procedures\RPC:Complete
- 本文实例为大家分享了python实现滑雪游戏的具体代码,供大家参考,具体内容如下# coding: utf-8# 滑雪小游戏import s
- 1.Order By原理MySQL的Order By操作用于排序,并且会有多种不同的排序算法,他们的性能都是不一样的。假设有一个表,建表的s
- 之前安装过Anaconda3,但是今天发现我安装的Anaconda Navigator不见了,然后看了网上的各种博客发现是自己安装Anaco
- 字符串中字符大小写的变换1. str.lower() //小写>>> 'SkatE'
- python的pickle模块实现了基本的数据序列和反序列化。通过pickle模块的序列化操作我们能够将程序中运行的对象信息保存到文件中去,
- 前言写程序已经丢掉很长一段时间了,最近觉得完全把技术丢掉可能是个死路,还是应该捡起来,所以打算借CSDN来记录学习过程, 由于以前没事的时候
- 多表操作 在一个数据库中,可能存在多个表,这些表都是相互关联的。我
- 一、route()路由概述功能:将URL绑定到函数路由函数route()的调用有两种方式:静态路由和动态路由二、静态路由和动态路径方式1:静
- 1.1MyBatis简介 MyBatis 是一个可以自定义SQL、存储过程和高级
- python,pycharm的环境变量设置官网下载安装python解释器时,如果忘记勾选添加到环境变量[add to path],可进行如下
- 一.克隆表法一mysql> create table info1 like info;复制格式,通过LIKE方法,复制info表结构生
- 本文实现Redis的协议层,协议层负责解析指令,然后将指令交给核心database执行echo database用来测试协议层的代码http
- 本文实例讲述了PHP获取二叉树镜像的方法。分享给大家供大家参考,具体如下:问题操作给定的二叉树,将其变换为源二叉树的镜像。解决思路翻转二叉树
- 在程序的开发过程中,处理分页是大家接触比较频繁的事件,因为现在软件基本上都是与数据库进行挂钩的。但效率又是我们所追求的,如果是像原来那样把所
- 刚开始学习tensorflow,还不太会用,开个博记录,今天遇到一个问题是用tf.layers.dense创建的全连接层,如何查看权重?知道
- by cpglkg <script>var arr=[5,10,15];function rect(arr,width){&nb
- 作为一个诞生已有 30 余年的编程语言,Python 的流行度在近几年迎来了 * 性的增长。为了方便大家能够更好的采用 Python,利用该语
- 使用pix2pix-gan做医学图像合成的时候,如果把nii数据转成png格式会损失很多信息,以为png格式图像的灰度值有256阶,因此直接