一、Mergepython有多种数据合并的方法,在不同的场合我们可以使用不用的方法
merge可能是我们最熟悉,也最常用的一个方法,因为它的用法与mysql的连接(join)非常类似。
函数介绍pd.merge( left, right, how=‘inner’, on=None, left_on=None, right_on=None, left_index=False, right_index=False, sort=False, suffixes=(‘_x’, ‘_y’), copy=True, indicator=False, validate=None,)
参数详解【常用参数】
- left: DataFrame | Series,合并的左表
- right: DataFrame | Series,合并的右表
- how: str = “inner” 合并方式,默认内连接,常用的可以改成left,左连接
- on: IndexLabel | None = None, 关联键(如果左右表名称不一样,用下面2个参数)
- left_on: IndexLabel | None = None, 左表关联键
- right_on: IndexLabel | None = None,右表关联键
- suffixes: Suffixes = (“_x”, “_y”), 左右表相同名称的变量,会自动添加后缀名
【非常用参数】
- left_index: bool = False,
- right_index: bool = False,
- sort: bool = False,
- copy: bool = True,
- indicator: bool = False,
- validate: str | None = None,
创建示例数据
import pandas as pd
import numpy as np
left = pd.DataFrame({'key': [1, 2, 3], 'val': ['a', 'b', 'c']})
right = pd.DataFrame({'key': [2, 3], 'val': ['B', 'C']})
In [3]:print(left)
Out[3]:
key val
0 1 a
1 2 b
2 3 c
In [5]:print(right )
Out[5]:
key val
0 2 B
1 3 C
默认的inner join,只合并到2行
In [11]: pd.merge(left, right, on='key') Out[11]: key val_x val_y 0 2 b B 1 3 c C
改成left join,合并到3行,没有合并到的行为空
In [12]: pd.merge(left, right, left_on='key', right_on='key', how='left') Out[12]: key val_x val_y 0 1 a NaN 1 2 b B 2 3 c C二、concat
contact实现的是横向和纵向的拼接,通过axis参数配置,1是横向,0是纵向
横向拼接In [14]: pd.concat([left, right], axis=1) Out[14]: key val key val 0 1 a 2.0 B 1 2 b 3.0 C 2 3 c NaN NaN纵向拼接
pd.concat([left, right], axis=0) Out[15]: key val 0 1 a 1 2 b 2 3 c 0 2 B 1 3 C三、join
join用的不多,跟merge差不多,只不过是左表.join右表的形式。参数没merge好理解,不太建议用。
In [24]:left.join(right, lsuffix='_left', rsuffix='_right') Out[24]: key_left val_left key_right val_right 0 1 a 2.0 B 1 2 b 3.0 C 2 3 c NaN NaN
join我很少用,大家如果有需要,请查看官方文档介绍
四、appendappend的作用是为 DataFrame 追加行。
默认的配置,合并后的索引是保留原来的,即会出现重复
In [29]: left.append(right) Out[29]: key val 0 1 a 1 2 b 2 3 c 0 2 B 1 3 C
增加一个ignore_index=True的参数配置,可以实现索引新增
left.append(right, ignore_index=True) Out[28]: key val 0 1 a 1 2 b 2 3 c 3 2 B 4 3 C
罗列了常用的方法,还有很多参数没有写得很全,未完待续~~~



