Python/Pandas 数据规整/合并数据集Merge/Concat/Join/Combine_first函数

本文详细介绍了Pandas中用于数据合并的关键函数:merge, concat, DataFrame.join 和 combine_first。讲解了各种合并方式,包括单键、多键合并,索引合并,层次化索引,以及不同轴向的合并策略,帮助理解数据规整过程。" 123323653,11200489,眼动追踪研究:理论、实践与论文撰写指南,"['心理学', '脑科学', '眼动技术', '论文写作', '实验方法']

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

目录

1 pandas.merge

1.1 merge函数的语法

 1.2 单一键上合并

1.2.1 key名相同

 1.2.2 两者key名不同

1.3 多个键上合并

1.4 连接键key之外,合并数据中两者存在重复列名

1.5 索引上的合并

1.5.1 使用单方DataFrame索引

1.5.2 使用双方DataFrame索引

1.6 层次化索引

2 Pandas.concat

2.1 concat()函数语法

2.2 不同轴向上合并

2.2.1 axis=0轴上合并

2.2.2 axis=1轴上合并

2.3 设置其他轴上索引

2.4 当传入对象obj为字典

2.5 管理分层索引

3 pandas.DataFrame.join

3.1 join()函数语法

3.2 两个DataFrame连接

3.3 多个DataFrame连接

4 combine_first 

4.1 pandas.Series.combine_first

4.1.1 Series.combine_first 函数语法

4.1.2 Series.combine_first 实例

4.2 pandas.DataFrame.combine_first

4.2.1 DataFrame.combine_first函数语法

4.2.2 DataFrame.combine_first 实例

5 小结


在数据分析和建模的工作中,需要对数据进行规整:加载、清理、转换以及重塑等。

本文总结梳理Python标准库和Pandas用于数据集合并的两种方法:pandas.merge,pandas.concat,pandas.DataFrame.join,combine_first。

参考书籍《利用Python进行数据分析》

1 pandas.merge

数据集的merge合并是通过一个或多个键key将行链接起来。

1.1 merge函数的语法

pandas.merge(leftrighthow='inner'on=Noneleft_on=Noneright_on=Noneleft_index=Falseright_index=Falsesort=Falsesuffixes=('_x''_y')copy=Trueindicator=Falsevalidate=None)

主要参数:

参数 说明
left 参与合并的左侧DataFrame
right 参与合并的右侧DataFrame
how “inner”,“outer”,“left”,“right”其中之一。默认为“inner”
on

用于连接的列名。必须存在于左右两个DataFrame对象中。

如果未指定,且其他连接键也未指定,则以left和right列名的交集作为连接键

left_on 左侧DataFrame中用作连接键的列
right_on 右侧DataFrame中用作连接键的列
left_index 将左侧的行索引用作其连接键
right_index 将右侧的行索引用作其连接键
sort

根据连接键对合并后的数据进行排序,默认为False,按照合并的方式how进行排序。

如果为True,按照连接键名的字母顺序排序

suffixes

字符串值元祖,用于追加到重叠列名的末尾,默认为('_x','_y')。

例如,如果左右两个DataFrame对象都有'data',则结果中就会出现'data_x' 和 'data_y'

copy 设置会False,可以在某些特殊情况下避免将数据复制到结果数据中。默认总是复制。

 1.2 单一键上合并

1.2.1 key名相同

 

import pandas as pd

import numpy as np

df1 = pd.DataFrame({"key":["b","b","a","c","a","a","b"],"data1":range(7)})

df2 = pd.DataFrame({"key":["a","b","d"],"data2":range(3)})

pd.merge(df1,df2, on="key") # merge默认的方式是inner

df1:                                  df2:                                                 pd.merge(df1,df2, on="key")

                                                       

 上述是一种多对一的合并。函数中如果没有指定on="key"也是可以的,默认选择两个dataframe中相同的key来连接。

但,建议还是要显式表达出来。

 1.2.2 两者key名不同

这种情况,可以用left_on 和 right_on 分别指定。

df3 = pd.DataFrame({"lkey":["b","b","a","c","a","a","b"],"data1":range(7)})

df4 = pd.DataFrame({"rkey":["a","b","d"],"data2":range(3)})

pd.merge(df3,df4,left_on="lkey",right_on="rkey")

df3:                                  df4:                                                 merge函数作用后

                                         

默认merge连接方式为inner,即求df3和df4的交集,所以c,d对应的数据在上述结果中消失了。并集,可以设置参数how='outer'。

1.3 多个键上合并

多个键上合并,需要设置参数on,传入一个列名组成的列表做为参数即可。

left = pd.DataFrame({"key1":['foo','foo','bar'],"key2":['one','two','one'],'lval':[1,2,3]})

right = pd.DataFrame({"key1":['foo','foo','bar','bar'],"key2":['one','one','one','two'],'rval':[4,5,6,7]})

pd.merge(left,right,on=["key1","key2"],how="outer")

 left:                                         right:                                                 merge函数作用后

                                     

 

1.4 连接键key之外,合并数据中两者存在重复列名

如果将上述创建的left表和right表,仅按照key1进行合并,两者都存在key2这一相同的列名,如何在合并后的dataframe中加以区分呢?

merge有一个很实用的suffixes参数,默认是在重复的列名后面加上(‘_x’, ‘_y’)。

left = pd.DataFrame({"key1":['foo','foo','bar'],"key2":['one','two','one'],'lval':[1,2,3]})

right = pd.DataFrame({"key1":['foo','foo','bar','bar'],"key2":['one','one','one','two'],'rval':[4,5,6,7]})

pd.merge(left,right,on=["key1"])

left:                                         right:                                 merge函数作用后

                    

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值