栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 前沿技术 > 大数据 > 大数据系统

pandas多表格数据合并(pandas groupby 合并多行)

pandas多表格数据合并(pandas groupby 合并多行)

Pandas数据合并

直接合并

横向堆叠(横向合并)

外连接内连接 纵向堆叠(纵向合并)

外连接内连接 使用append()方法 来进行纵向合并 主键合并

当左右两边存在相同的列时:

外连接内连接左连接右连接 当外键中有重复的值时当 外键的列的名称不同,但是列内部的数据相同时当左右的两个Dataframe存在同名的列,但是该列不是外键时当左右两边存在多列外键时当两边存在多个外键列,并且外键列的列名不同,但是里面的值相同使用Dataframe.join()方法进行数据合并 重叠合并

填充的规则:
引用Pandas:

整篇文章使用pd代替pandas

import pandas as pd
直接合并 横向堆叠(横向合并)

有如下数据

外连接
# 将 df2拼接到 df1的右边
# 在列的方向上,直接合并!  在行的方向上,获取所有的行 ---- 在没有值的地方,使用NaN来填充!
ret = pd.concat(
    objs=(df1, df2),  # 传递一个元组对象
    axis=1,  # axis=1表示列的方向
    join='outer',  # 外连接
)
print('ret:n', ret)

内连接
# 在列的方向上,直接合并!  在行的方向上,获取共同拥有的行!
ret = pd.concat(
    objs=(df1, df2),  # 传递一个元组对象
    axis=1,  # axis=1表示列的方向
    join='inner',  # 内连接
)
print('ret:n', ret)

纵向堆叠(纵向合并) 外连接
# 在行的方向上,直接拼接 ---在列的方向上,获取所有的列  ------在没有值的地方,用NaN来填充!
ret = pd.concat(
    objs=(df1, df2),  # 传递一个元组对象
    axis=0,  # axis=1表示列的方向, axis=0表示行的方向
    join='outer',  # 外连接
    sort=True,	# pandas的sort参数表示是否需要按照连接轴的索引进行排序,sort=True表示按索引进行排序,sort=False则表示不按索引进行排序
)
print('ret:n', ret)

内连接
# 在行的方向上,直接拼接 ---在列的方向上,获取共同拥有的列!
ret = pd.concat(
    objs=(df1, df2),  # 传递一个元组对象
    axis=0,  # axis=1表示列的方向, axis=0表示行的方向
    join='inner',  # 外连接
    sort=True,
)
print('ret:n', ret)

使用append()方法 来进行纵向合并
ret = df1.append(df2, sort=True)
print('ret:n', ret)

其效果和 pd.concat的 纵向合并 的 外连接 效果是一样的!

主键合并

类似于sql的 外键连接,使用外键将多个 表格连接到一起

当左右两边存在相同的列时:

外连接
ret = pd.merge(
    left=df1,  # 左边的Dataframe
    right=df2,  # 右边的Dataframe
    on='key',  # 指定连接的外键
    how='outer',  # 外连接 ----以外键列所有的值作为连接键,如果没有对应值的位置使用NaN来填充
)
print('ret:n', ret)

内连接
ret = pd.merge(
    left=df1,  # 左边的Dataframe
    right=df2,  # 右边的Dataframe
    on='key',  # 指定连接的外键
    how='inner',  # 内连接 ----以外键列共同拥有的值作为连接键!
)
print('ret:n', ret)

左连接
ret = pd.merge(
    left=df1,  # 左边的Dataframe
    right=df2,  # 右边的Dataframe
    on='key',  # 指定连接的外键
    how='left',  # 左(外)连接 ----以左边的Dataframe的外键列的所有值来作为链接键,用右边的Dataframe来匹配,如果没有值能匹配上,用NaN来填充
)
print('ret:n', ret)

右连接
ret = pd.merge(
    left=df1,  # 左边的Dataframe
    right=df2,  # 右边的Dataframe
    on='key',  # 指定连接的外键
    how='right',  # 右(外)连接 ----以右边的Dataframe的外键列的所有值来作为链接键,用左边的Dataframe来匹配,如果没有值能匹配上,用NaN来填充
)
print('ret:n', ret)

当外键中有重复的值时

ret = pd.merge(
    left=df1,  # 左边的Dataframe
    right=df2,  # 右边的Dataframe
    on='key',  # 指定连接的外键
    how='outer',  # 外连接 ----以外键列所有的值作为连接键,如果没有对应值的位置使用NaN来填充
)
print('ret:n', ret)

当 外键的列的名称不同,但是列内部的数据相同时

ret = pd.merge(
    left=df3,  # 左边的Dataframe
    right=df4,  # 右边的Dataframe
    left_on='Kx',  # 指定的是左边的外键列
    right_on='Ky',  # 指定的是右边的外键列
    how='outer',  # 外连接  inner --内连接    left ---左(外)连接  right --有(外)连接
)
print('ret:n', ret)

当左右的两个Dataframe存在同名的列,但是该列不是外键时

可以使用suffixes参数加以区分(默认为 ("_x", “_y”) )

ret = pd.merge(
    left=df3,  # 左边的Dataframe
    right=df5,  # 右边的Dataframe
    left_on='Kx',  # 指定的是左边的外键列
    right_on='Ky',  # 指定的是右边的外键列
    how='outer',  # 外连接  inner --内连接    left ---左(外)连接  right --有(外)连接
    suffixes=('_I', '_II'),  # 当左边存在同名的列,但是该列不是外键时,需要用到该参数加以区分!
)
print('ret:n', ret)

当左右两边存在多列外键时

ret = pd.merge(
    left=df6,  # 左边的Dataframe
    right=df7,  # 右边的Dataframe
    on=['kk', 'kg'],  # 指定链接的多个外键
    how='outer',  # 外连接  inner --内连接    left ---左(外)连接  right --有(外)连接
)
print('ret:n', ret)

当两边存在多个外键列,并且外键列的列名不同,但是里面的值相同

ret = pd.merge(
    left=df6,  # 左边的Dataframe
    right=df7,  # 右边的Dataframe
    left_on=['k', 'g'],  # 指定的是左边的外键列
    right_on=['kk', 'kg'],  # 指定的是右边的外键列
    how='outer',  # 外连接  inner --内连接    left ---左(外)连接  right --有(外)连接
)
print('ret:n', ret)

使用Dataframe.join()方法进行数据合并

ret = df6.join(df7)
print("ret:n", ret)	

重叠合并

数据分析和处理过程中若出现两份数据的内容几乎一致的情况,但是某些特征在其中一 张表上是完整的,而在另外一张表上的数据则是缺失的时候,可以用 combine_first 方法进行 重叠数据合并。

用一张表–去重叠另外一张表—前提:结构类似!


使用df2来重叠 df1中缺失的部分

ret = df1.combine_first(df2)
print('ret:n', ret)

填充的规则:

df1中没有值的位置,使用df2中对应位置的值来填;df1中有值的位置,df2是填不了的;df1中没有值的位置,df2对应位置也没有值,那么无法填充

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/772365.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号