欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Pandas中数据合并

程序员文章站 2022-06-05 19:38:57
...

一、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 相同字段的表首尾相接(列对齐)

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

Pandas中数据合并

1.2 横向表拼接(行对齐)

1.2.1 axis参数

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

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

Pandas中数据合并

1.2.2 join参数

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

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

Pandas中数据合并

1.2.3 join_axes

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

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

Pandas中数据合并

1.2.4 无视index的concat

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

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

Pandas中数据合并

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

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

直接用keys参数实现

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

Pandas中数据合并

  • 传入字典来增加分组键
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中数据合并

三、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中数据合并

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

Pandas中数据合并

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

Pandas中数据合并

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

Pandas中数据合并

四、总结

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