pandas数据的合并concat()和merge()方式

Written by

in

文章目录
  • concat() 函数可以将数据根据不同的轴作进行合并 pd.concat(objs, axis=0, join=’outer’) objs: series、dataframe或者是panel构成的序列list axis: 需要合并链接的轴,0是行,1是列,默认是0 join:连接的方式 inner,或者outer,默认是outer 准备数据 dict1={ ‘A’: [‘A0’, ‘A1’, ‘A2’, ‘A3’], ‘B’: [‘B0’, ‘B1’, ‘B2’, ‘B3’], ‘C’: [‘C0’, ‘C1’, ‘C2’, ‘C3’]} df1=pd.DataFrame(dict1) print(df1) dict2={ ‘B’: [‘B0’, ‘B1’, ‘B2’, ‘B3’], ‘C’: [‘C0’, ‘C1’, ‘C2’, ‘C3’], ‘D’: [‘D0’, ‘D1’, ‘D2’, ‘D3’]} df2=pd.DataFrame(dict2) print(df2)
  • merge(left, right, how=’inner’, on=None) 参数介绍 left和right, 两个要合并的DataFrame(对应的左连接和右连接) how: 连接的方式, 有inner(内连接)、left(左连接)、right(右连接)、outer(外连接), 默认为 inner on: 指的是用于连接的列索引名称, 必须存在于左右两个DataFrame中, 如果没有指定且其他参数也没有指定,则两个DataFrame列名交集作为连接键 import pandas as pd left = pd.DataFrame({‘key’:[‘a’,’b’,’b’,’d’],’data1′:range(4)}) print(left) right = pd.DataFrame({‘key’:[‘a’,’b’,’c’],’data2′:range(3)}) print(right) key data1 0 a 0 1 b 1 2 b 2 3 d 3 key data2 0 a 0 1 b 1 2 c 2
  • 例如: 现在有两张表格分别存储了9月和10月份的成交信息, 那么这个时候我们就可以使用concat( )将两个表沿着0轴合并 例如: 现在有两张表格,一个是成交信息,包含订单号、金额、客户ID等信息; 第二个是客户信息,包含客户ID、姓名、电话号等信息,那么这个时候我们就可以使用merge()根据客户ID将两个表合并成一个完整的表
  • 以上为个人经验,希望能给大家一个参考,也希望大家多多支持风君子博客。 您可能感兴趣的文章: pandas常用表连接merge/concat/join/append详解 Pandas使用Merge与Join和Concat分别进行合并数据效率对比分析 pandas中DataFrame数据合并连接(merge、join、concat) pandas dataframe的合并实现(append, merge, concat) 在Pandas中DataFrame数据合并,连接(concat,merge,join)的实例 Pandas 合并多个Dataframe(merge,concat)的方法
  • 目录
    • concat() 轴向连接
      • 合并
        • (1) join='outer',axis=0
        • (2)join='outer',axis=1
        • (3) join=inner, axis=0
    • merge() 融合
      • inner(内连接)
        • outer (外连接)
          • left(左连接)
            • right (右连接)
            • 应用场景
              • 总结
                import pandas as pd
                
                • 轴向连接(concatenation): pd.concat() 可以沿一个轴将多个DataFrame对象连接在一起, 形成一个新的Dataframe对象
                • 融合(merging):pd.merge()方法可以根据一个或多个键将不同DataFrame中的行连接起来。

                concat() 函数可以将数据根据不同的轴作进行合并

                pd.concat(objs, axis=0, join='outer')
                • objs: series、dataframe或者是panel构成的序列list
                • axis: 需要合并链接的轴,0是行,1是列,默认是0
                • join:连接的方式 inner,或者outer,默认是outer

                准备数据

                dict1={
                    'A': ['A0', 'A1', 'A2', 'A3'],
                    'B': ['B0', 'B1', 'B2', 'B3'],
                    'C': ['C0', 'C1', 'C2', 'C3']}
                df1=pd.DataFrame(dict1)
                print(df1)
                
                dict2={
                    'B': ['B0', 'B1', 'B2', 'B3'],
                    'C': ['C0', 'C1', 'C2', 'C3'],
                    'D': ['D0', 'D1', 'D2', 'D3']}
                df2=pd.DataFrame(dict2)
                print(df2)
                

                join的值 inner ,得到的是两表的交集,如果是outer,得到的是两表的并集

                • 当join=‘outer’,axis参数为0时,列进行并集处理,纵向表拼接,缺失值由NaN填充,并且会保留原有数据的行索引
                pd.concat([df1, df2], axis=0, join='outer', sort=True) # 我没加 sort=True 会报一个警告
                

                A B C D
                0 A0 B0 C0 NaN
                1 A1 B1 C1 NaN
                2 A2 B2 C2 NaN
                3 A3 B3 C3 NaN
                0 NaN B0 C0 D0
                1 NaN B1 C1 D1
                2 NaN B2 C2 D2
                3 NaN B3 C3 D3
                • 如果两个表的index都没有实际含义, 使用ignore_index参数置为 true, 重新生成一个新的index
                pd.concat([df1,df2],axis=0,join='outer',ignore_index=True, sort=True) # 我没加 sort=True 会报一个警告
                
                A B C D
                0 A0 B0 C0 NaN
                1 A1 B1 C1 NaN
                2 A2 B2 C2 NaN
                3 A3 B3 C3 NaN
                4 NaN B0 C0 D0
                5 NaN B1 C1 D1
                6 NaN B2 C2 D2
                7 NaN B3 C3 D3

                • 当join=‘outer’,axis参数为1时,行进行并集处理,横向表拼接,缺失值由NaN填充

                pd.concat([df1,df2],axis=1,join='outer', sort=True) # 我没加 sort=True 会报一个警告
                
                A B C B C D
                0 A0 B0 C0 B0 C0 D0
                1 A1 B1 C1 B1 C1 D1
                2 A2 B2 C2 B2 C2 D2
                3 A3 B3 C3 B3 C3 D3

                pd.concat([df1,df2],axis=0,join='inner',ignore_index=True)
                

                B C
                0 B0 C0
                1 B1 C1
                2 B2 C2
                3 B3 C3
                4 B0 C0
                5 B1 C1
                6 B2 C2
                7 B3 C3

                merge(left, right, how='inner', on=None)
                

                参数介绍

                • left和right, 两个要合并的DataFrame(对应的左连接和右连接)
                • how: 连接的方式, 有inner(内连接)、left(左连接)、right(右连接)、outer(外连接), 默认为 inner
                • on: 指的是用于连接的列索引名称, 必须存在于左右两个DataFrame中, 如果没有指定且其他参数也没有指定,则两个DataFrame列名交集作为连接键
                import pandas as pd
                left = pd.DataFrame({'key':['a','b','b','d'],'data1':range(4)})
                print(left)
                
                right = pd.DataFrame({'key':['a','b','c'],'data2':range(3)})
                print(right)
                
                  key  data1
                0   a      0
                1   b      1
                2   b      2
                3   d      3
                  key  data2
                0   a      0
                1   b      1
                2   c      2
                

                • merge()默认做inner连接,并且使用两个DataFrame的列名交集(key)作为连接键,同样,最终连接的数据也是两个DataFramekey列数据的交集

                pd.merge(left,right)
                
                key data1 data2
                0 a 0 0
                1 b 1 1
                2 b 2 1

                • 当merge()做outer连接时最终连接的数据是两个DataFramekey列数据的并集,缺失的内容由NaN填充
                pd.merge(left,right,on=['key'],how='outer')
                

                key data1 data2
                0 a 0.0 0.0
                1 b 1.0 1.0
                2 b 2.0 1.0
                3 d 3.0 NaN
                4 c NaN 2.0

                • 当merge()做left连接时,最终连接的数据将以left数据的链接建为准合并两个数据的列数据,缺失的内容由NaN填充

                pd.merge(left,right,on=['key'],how='left')
                
                key data1 data2
                0 a 0 0.0
                1 b 1 1.0
                2 b 2 1.0
                3 d 3 NaN

                • 当merge()做right连接时,最终连接的数据将以right数据的链接建为准合并两个数据的列数据,缺失的内容由NaN填充
                pd.merge(left,right,on=['key'],how='right')
                
                key data1 data2
                0 a 0.0 0
                1 b 1.0 1
                2 b 2.0 1
                3 c NaN 2

                例如:

                • 现在有两张表格分别存储了9月和10月份的成交信息,
                • 那么这个时候我们就可以使用concat( )将两个表沿着0轴合并

                例如:

                • 现在有两张表格,一个是成交信息,包含订单号、金额、客户ID等信息;
                • 第二个是客户信息,包含客户ID、姓名、电话号等信息,那么这个时候我们就可以使用merge()根据客户ID将两个表合并成一个完整的表

                以上为个人经验,希望能给大家一个参考,也希望大家多多支持风君子博客。

                您可能感兴趣的文章:

                • pandas常用表连接merge/concat/join/append详解
                • Pandas使用Merge与Join和Concat分别进行合并数据效率对比分析
                • pandas中DataFrame数据合并连接(merge、join、concat)
                • pandas dataframe的合并实现(append, merge, concat)
                • 在Pandas中DataFrame数据合并,连接(concat,merge,join)的实例
                • Pandas 合并多个Dataframe(merge,concat)的方法

                站内搜索