Pandas中数据合并

文章目录

    • 一、pd.concat实现数据合并
      • 1.1 相同字段的表首尾相接(列对齐)
      • 1.2 横向表拼接(行对齐)
        • 1.2.1 axis参数
        • 1.2.2 join参数
        • 1.2.3 join_axes
        • 1.2.4 无视index的concat
        • 1.2.5 合并的同时增加区分数据组的键
    • 二、df.append
    • 三、pd.merge
      • 3.1 pd.merge合并
    • 四、总结

一、pd.concat实现数据合并

  • pd.concat(objs, axis=0, join=‘outer’, join_axes=None, ignore_index=False,keys=None)
    • 将数据根据不同的轴作简单的融合
    • axis=0:沿0轴(纵向)进行合并
    • axis=1:沿1轴(横向)进行合并
#创建4个DataFrame
columns=list("ABCDE")
data=pd.DataFrame([[char+str(i) for char in columns] for i in range(12)],columns=columns)
df1,df2,df3,df4=data.iloc[:4,:4],data.iloc[4:8,:4],data.iloc[8:,:4],data.loc[[2,3,6,7],list('BDE')]

Pandas中数据合并_第1张图片

1.1 相同字段的表首尾相接(列对齐)

result=pd.concat([df1,df2,df3],axis=0)
result

Pandas中数据合并_第2张图片

1.2 横向表拼接(行对齐)

1.2.1 axis参数

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

result = pd.concat([df1, df4], axis=1)
result

Pandas中数据合并_第3张图片

1.2.2 join参数

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

result = pd.concat([df1, df4], axis=1, join='inner')
result

Pandas中数据合并_第4张图片

1.2.3 join_axes

如果有join_axes的参数传入,可以指定根据那个轴来对齐数据

  • 例如根据df1表对齐数据,就会保留指定的df1表的轴,然后将df4的表与之拼接
result = pd.concat([df1, df4], axis=1, join_axes=[df1.index])
result

Pandas中数据合并_第5张图片

1.2.4 无视index的concat

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

result = pd.concat([df1, df4], axis=0, ignore_index=True)
result

Pandas中数据合并_第6张图片

1.2.5 合并的同时增加区分数据组的键

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

直接用keys参数实现

result = pd.concat([df1,df2,df3], keys=['x', 'y', 'z'],axis=0)
result

Pandas中数据合并_第7张图片

  • 传入字典来增加分组键
pieces = {'x': df1, 'y': df2, 'z': df3}
result = pd.concat(pieces,axis=0)
result

二、df.append

append方法等价于pd.concat(axis=0)的情况

df1.append(df2)

Pandas中数据合并_第8张图片

三、pd.merge

  • pd.merge(left, right, how=‘inner’, on=None)
    • 可以指定按照两组数据的共同键值对合并或者左右各自
    • left: DataFrame
    • right: 另一个DataFrame
    • on: 指定的共同键
    • how:按照什么方式连接
Merge method SQL Join Name Description
left LEFT OUTER JOI Use keys from left frame only
right RIGHT OUTER JOIN Use keys from right frame only
outer FULL OUTER JOIN Use union of keys from both frames
inner INNER JOIN Use intersection of keys from both frames

3.1 pd.merge合并

left = pd.DataFrame({'key1': ['K0', 'K0', 'K1', 'K2'],
                        'key2': ['K0', 'K1', 'K0', 'K1'],
                        'A': ['A0', 'A1', 'A2', 'A3'],
                        'B': ['B0', 'B1', 'B2', 'B3']})

right = pd.DataFrame({'key1': ['K0', 'K1', 'K1', 'K2'],
                        'key2': ['K0', 'K0', 'K0', 'K0'],
                        'C': ['C0', 'C1', 'C2', 'C3'],
                        'D': ['D0', 'D1', 'D2', 'D3']})

# 默认内连接
result = pd.merge(left, right, on=['key1', 'key2'])

Pandas中数据合并_第9张图片

  • 左连接
result = pd.merge(left, right, how='left', on=['key1', 'key2'])

Pandas中数据合并_第10张图片

  • 右连接
result = pd.merge(left, right, how='right', on=['key1', 'key2'])

Pandas中数据合并_第11张图片

  • 外链接
result = pd.merge(left, right, how='outer', on=['key1', 'key2'])

Pandas中数据合并_第12张图片

四、总结

  • pd.concat([数据1, 数据2], axis=**)【掌握】
    • axis=0:沿0轴(纵向)进行合并
    • axis=1:沿1轴(横向)进行合并
  • df1.append(df2)【掌握】
  • pd.merge(left, right, how=, on=)【掌握】
    • how – 以何种方式连接
    • on – 连接的键的依据是哪几个

你可能感兴趣的:(数据分析)