本文介绍: 在数据处理过程中,经常会遇到多个表进行拼接合并需求,在Pandas中有多个拼接合并方法,每种方法都有自己擅长的拼接方式本文pd.concat()进行详细讲解,希望对你有帮助。pd.concat()函数可以沿着指定的轴将多个dataframe或者series拼接到一起,这一点和另一个常用pd.merge()函数不同pd.merge()解决数据库样式的左右拼接,不能解决上下拼接。一、基本语法pd.concat( objs, axis=0, join=’o

数据处理过程中,经常会遇到多个表进行拼接合并需求,在 Pandas 中有多个拼接合并方法,每种方法都有自己擅长的拼接方式本文pd.concat()进行详细讲解,希望对你有帮助。

干货推荐

一、基本语法

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

二、参数含义

三、竖向堆叠

构建需要数据表

import pandas as pd
df1 = pd.DataFrame({'A':['A{}'.format(i) for i in range(0,4)],
                    'B':['B{}'.format(i) for i in range(0,4)],
                    'C':['C{}'.format(i) for i in range(0,4)]
                 })

df2 = pd.DataFrame({'A':['A{}'.format(i) for i in range(4,8)],
                    'B':['B{}'.format(i) for i in range(4,8)],
                    'C':['C{}'.format(i) for i in range(4,8)]
                 })
df3 = pd.DataFrame({'A':['A{}'.format(i) for i in range(8,12)],
                    'B':['B{}'.format(i) for i in range(8,12)],
                    'C':['C{}'.format(i) for i in range(8,12)]
                 })

将表构成list然后在作为concat输入


frames = [df1, df2, df3]
result = pd.concat(frames)
 A    B    C
0   A0   B0   C0
1   A1   B1   C1
2   A2   B2   C2
3   A3   B3   C3
0   A4   B4   C4
1   A5   B5   C5
2   A6   B6   C6
3   A7   B7   C7
0   A8   B8   C8
1   A9   B9   C9
2  A10  B10  C10
3  A11  B11  C11

传入也可以字典

frames = {'df1':df1, 'df2':df2,'df3':df3}
result = pd.concat(frames)
   A    B    C
df1 0   A0   B0   C0
    1   A1   B1   C1
    2   A2   B2   C2
    3   A3   B3   C3
df2 0   A4   B4   C4
    1   A5   B5   C5
    2   A6   B6   C6
    3   A7   B7   C7
df3 0   A8   B8   C8
    1   A9   B9   C9
    2  A10  B10  C10
    3  A11  B11  C11

三、横向拼接

1、axis

axis = 1的时候concat就是对齐然后不同列名称的两张表合并

#再构建一个
df4 = pd.DataFrame({'C':['C{}'.format(i) for i in range(3,9)],
                    'E':['E{}'.format(i) for i in range(3,9)],
                    'F':['F{}'.format(i) for i in range(3,9)]
                 })
pd.concat([df1,df4], axis=1)
     A    B    C   C   E   F
0   A0   B0   C0  C3  E3  F3
1   A1   B1   C1  C4  E4  F4
2   A2   B2   C2  C5  E5  F5
3   A3   B3   C3  C6  E6  F6
4  NaN  NaN  NaN  C7  E7  F7
5  NaN  NaN  NaN  C8  E8  F8

2、join

加上join参数的属性,如果为’inner’得到的是两表的交集,如果是outer,得到的是两表的并集。

#  join='inner' 取交集
pd.concat([df1, df4], axis=1, join='inner')
    A   B   C   C   E   F
0  A0  B0  C0  C3  E3  F3
1  A1  B1  C1  C4  E4  F4
2  A2  B2  C2  C5  E5  F5
3  A3  B3  C3  C6  E6  F6

# join='outer' 和 默认值相同
pd.concat([df1, df4], axis=1, join='outer')
     A    B    C   C   E   F
0   A0   B0   C0  C3  E3  F3
1   A1   B1   C1  C4  E4  F4
2   A2   B2   C2  C5  E5  F5
3   A3   B3   C3  C6  E6  F6
4  NaN  NaN  NaN  C7  E7  F7
5  NaN  NaN  NaN  C8  E8  F8

四、对比 append 方法

appendseriesdataframe的方法,使用就是默认沿着列进行凭借(axis = 0,列对齐

df1.append(df2)
    A   B   C
0  A0  B0  C0
1  A1  B1  C1
2  A2  B2  C2
3  A3  B3  C3
0  A4  B4  C4
1  A5  B5  C5
2  A6  B6  C6
3  A7  B7  C7

五、忽略index

如果两个表的index没有实际含义,使用ignore_index参数,置true合并两个表就睡根据列字段对齐然后合并最后再重新整理一个新的index

pd.concat([df1, df4], axis=1, ignore_index=True) 
    0    1    2   3   4   5
0   A0   B0   C0  C3  E3  F3
1   A1   B1   C1  C4  E4  F4
2   A2   B2   C2  C5  E5  F5
3   A3   B3   C3  C6  E6  F6
4  NaN  NaN  NaN  C7  E7  F7
5  NaN  NaN  NaN  C8  E8  F8

六、增加区分组

前面提到的keys参数可以用来合并后的表增加key来区分不同的表数据来源

1、可以直接key参数实现

pd.concat([df1,df2,df3], keys=['x', 'y', 'z'])
 A    B    C
x 0   A0   B0   C0
  1   A1   B1   C1
  2   A2   B2   C2
  3   A3   B3   C3
y 0   A4   B4   C4
  1   A5   B5   C5
  2   A6   B6   C6
  3   A7   B7   C7
z 0   A8   B8   C8
  1   A9   B9   C9
  2  A10  B10  C10
  3  A11  B11  C11

2、传入字典来增加分组

frames = {'df1':df1, 'df2':df2,'df3':df3}
result = pd.concat(frames)
   A    B    C
df1 0   A0   B0   C0
    1   A1   B1   C1
    2   A2   B2   C2
    3   A3   B3   C3
df2 0   A4   B4   C4
    1   A5   B5   C5
    2   A6   B6   C6
    3   A7   B7   C7
df3 0   A8   B8   C8
    1   A9   B9   C9
    2  A10  B10  C10
    3  A11  B11  C11

七、加入新的行

1、列字段相同的加入

append方法可以series字典就够的数据作为dataframe的新一行插入

s2 = pd.Series(['X0', 'X1', 'X2', 'X3'], index=['A', 'B', 'C', 'D'])
df1.append(s2, ignore_index=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  X0  X1  X2   X3

2、列字段不同的加入

如果遇到两张表的列字段本来就不一样,但又想将两个表合并,其中无效的值用nan表示。那么可以使用ignore_index来实现

dicts = [{'A': 1, 'B': 2, 'C': 3, 'X': 4},
         {'A': 5, 'B': 6, 'C': 7, 'Y': 8}]
df1.append(dicts, ignore_index=True)
 A   B   C    X    Y
0  A0  B0  C0  NaN  NaN
1  A1  B1  C1  NaN  NaN
2  A2  B2  C2  NaN  NaN
3  A3  B3  C3  NaN  NaN
4   1   2   3  4.0  NaN
5   5   6   7  NaN  8.0

技术交流

欢迎转载、收藏、有所收获点赞支持一下!

目前开通了技术交流群,群友已超过1000人,添加最好备注方式为:来源+兴趣方向,方便找到志同道合的朋友

在这里插入图片描述

原文地址:https://blog.csdn.net/qq_34160248/article/details/122573719

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任

如若转载,请注明出处:http://www.7code.cn/show_45790.html

如若内容造成侵权/违法违规/事实不符,请联系代码007邮箱suwngjj01@126.com进行投诉反馈,一经查实,立即删除

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注