Pandas中DataFrame数据合并连接(concatmergejoin)之merge

Posted wqbin

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Pandas中DataFrame数据合并连接(concatmergejoin)之merge相关的知识,希望对你有一定的参考价值。

二、merge:通过键拼接列

类似于关系型数据库的连接方式,可以根据一个或多个键将不同的DatFrame连接起来。

该函数的典型应用场景是,针对同一个主键存在两张不同字段的表,根据主键整合到一张表里面。

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

 

   参数介绍:

     left和right:两个不同的DataFrame;

     how:连接方式,有inner、left、right、outer,默认为inner;

     on:指的是用于连接的列索引名称,必须存在于左右两个DataFrame中,如果没有指定且其他参数也没有指定,则以两个DataFrame列名交集作为连接键;

     left_on:左侧DataFrame中用于连接键的列名,这个参数左右列名不同但代表的含义相同时非常的有用;

     right_on:右侧DataFrame中用于连接键的列名;

     left_index:使用左侧DataFrame中的行索引作为连接键;

     right_index:使用右侧DataFrame中的行索引作为连接键;

     sort:默认为True,将合并的数据进行排序,设置为False可以提高性能;

     suffixes:字符串值组成的元组,用于指定当左右DataFrame存在相同列名时在列名后面附加的后缀名称,默认为(‘_x‘, ‘_y‘);

     copy:默认为True,总是将数据复制到数据结构中,设置为False可以提高性能;

     indicator:显示合并数据中数据的来源情况

 

 案例1

import  pandas as pd
import numpy  as np
random = np.random.RandomState(0)  #随机数种子,相同种子下每次运行生成的随机数相同
df1=pd.DataFrame(random.randn(3,4),columns=[a,b,c,d])
df1

技术图片

random = np.random.RandomState(0)
df2=pd.DataFrame(random.randn(2,3),columns=[b,d,a],index=["a1","a2"])
df2

技术图片

 

pd.merge(df1,df2)

技术图片

pd.merge(df1,df2,how="outer")

技术图片

案例2 默认按相同的列名键join

df3=pd.DataFrame({key:[a,b,b],data1:range(3)})
df3

技术图片

df4=pd.DataFrame({key:[a,b,c],data2:range(3)})
df4

技术图片

 

pd.merge(df3,df4)

 

 技术图片

 案例三

df1 = pd.DataFrame({lkey: [foo, bar, baz, foo],
                   value: [1, 2, 3, 5]})
df1

技术图片

df2 = pd.DataFrame({rkey: [foo, bar, baz, foo],
                    value: [5, 6, 7, 8]})
df2

技术图片

df1.merge(df2)

技术图片

Merge df1 and df2 on the lkey and rkey columns. The value columns have the default suffixes, _x and _y, 

df1.merge(df2,left_on="lkey",right_on="rkey")

 

技术图片

>>> df1.merge(df2, left_on=lkey, right_on=rkey, suffixes=(False, False))
Traceback (most recent call last):
...
ValueError: columns overlap but no suffix specified:
    Index([value], dtype=object)

 



以上是关于Pandas中DataFrame数据合并连接(concatmergejoin)之merge的主要内容,如果未能解决你的问题,请参考以下文章

Pandas中DataFrame数据合并连接(concatmergejoin)之merge

pandas数据规整化:清理转换合并重塑之合并数据集

基于多列值的具有重复键的两个大型 Pandas DataFrame 的条件合并/连接 - Python

pandas 学习 第10篇:DataFrame 数据处理(应用追加截断连接合并重复值重索引重命名重置索引设置轴索引选择和过滤)

我正在寻找一种有效的方法来连接和合并 pandas DataFrame 中关于某些标准的行

pandas合并/连接