数据分析中经常会遇到数据合并的基本问题 1. 数据或表格的上下连接 2. 数据或表格的左右连接。根据上述问题 本文总结了python中的表格合并函数的基本用法和使用效果
merge : 主要用于表格的左右连接concat : 既能用于表格的上下连接 也能用于表格的左右连接 主要取决于参数axis的设定append: 只能用于表格的上下连接 数据准备和说明 示例代码# 1.建立数据表
import numpy as np
import pandas as pd
df1 pd.Dataframe({ id : [ 01 , 02 , 03 , 04 ],
name : [ Alice , Bruce , Cook , Daisy ],
school : [ AA , BB , CC , AA ],
score : [85, 90, 75, 80]})
df2 pd.Dataframe({ id : [ 01 , 20 ],
name : [ Alice , Jason ],
school :[ AA , CC ],
score : [85, 88]})
df1和df2 表格的数据呈现如下图 特别注意这2个表格的第1行的数据是相同的。
pd.merge(left, right, how: str ‘inner’,on None, left_on None, right_on None,
left_index: bool False, right_index: bool False, sort: bool False,
suffixes (’_x’, ‘_y’), copy: bool True, indicator: bool False,
validate None,) - ‘Dataframe’
merge(): 主要使用于表格的左右连接(横向合并)
参数: left, rightleft: 表示连接中放在左边的表格
right: 表示连接中放在右边的表格
df pd.merge(left df1, right df2)
表格连接的结果是返回了两个表格的“交集” 即两个表格中都存在的相同记录 这是因为merge的参数how,它的默认值为 inner !
“inner”: 返回两个表格的交集
“outer” 返回两个表格的并集
# 2.1 设置how inner df pd.merge(left df1, right df2, how inner )
由于how的默认值是 inner , 因此连接的结果与上面的一样
# 2.2 设置how outer df pd.merge(left df1, right df2, how outer )
表格连接的结果 将两个表格中所有的数据 相同的数据只显示1次。相当于两个表格合并后去重。
# 2.3 设置how left -- 按照左边的表格进行数据合并 df pd.merge(left df1, right df2, how left )
# 2.4 设置how right -- 按照右边的表格进行数据合并 df pd.merge(left df1, right df2, how right )
3. 参数 on: 以哪个特征作为连接点
# 3.1 设置on [ id ] df pd.merge(left df1, right df2, on [ id ], how outer )
# 3.2 设置on [ school ] df pd.merge(left df1, right df2, on [ school ], how outer )参数 indicator : 指示器 为布尔值 默认为False
如果indicator设置为True 则向输出数据帧添加一个名为“u merge”的列 显示根据要求 每行数据在2个表格中的合并情况。
# 4.1 设置indicator True df pd.merge(left df1, right df2, on [ school ], how outer , indicator True)
5. 参数 sort: 排序 根据连接点进行排序 默认值为False
# 5.1 设置sort使用默认值 False df pd.merge(left df1, right df2, on [ score ], how outer )
# 5.2 设置sort True df pd.merge(left df1, right df2, on [ score ], how outer , sort True)2. concat() 2. 1 简介
pd.concat(objs: Union[Iterable[ForwardRef(‘NDframe’)], Mapping[Union[Hashable, NoneType], ForwardRef(‘NDframe’)]],
axis 0, join ‘outer’, ignore_index: bool False, keys None, levels None,
names None, verify_integrity: bool False, sort: bool False, copy: bool True,
) - Union[ForwardRef(‘Dataframe’), ForwardRef(‘Series’)]
df pd.concat([df1, df2], axis 0)
df1和df2是直接进行上下连接 – 常用于数据 记录 的汇总合并
参数 join的默认值 “outer”, 因此下列2行代码的结果是一样的。
df pd.concat([df1, df2], axis 1) # df pd.concat([df1, df2], axis 1, join outer )
小结
对比结果 pd.concat() 适用于数据表(Dataframe)的上下连接 而对于表格的左右连接 pd.merge() 会更好一些。
函数append(): 只能使用于表格的上下连接 表格的顺序取决于那一个表格放在前面。
# 在表格df1后面连接表格df2: df df1.append(df2)
# 在表格df2后面连接表格df1 df df2.append(df1)4. 结束语 merge(): 适用表格的左右连接 并且用法比较灵活便捷。concat(): 虽然可以用于表格的上下连接和左右连接 通常会更适用于上下连接 左右连接的效果比不上merge()函数。append(): 只能用于表格数据的上下连接 表格的先后次序取决于语句中哪个表格放在前面。



