数据合并特指两个文件或者DataFrame对象合并的过程,而数据规整特指合并后或者无须合并的数据的清理、转换、重塑过程。
数据合并主要包括下面两种操作:
-
轴向连接(concatenation),
pd.concat()
可以沿一个轴将多个DataFrame对象连接在一起,形成一个新的DataFrame对象 -
融合(merging/joining/combining),
pd.merge()
和join
实例方法可以根据一个或多个键将不同DataFrame中的行连接起来,这个过程类似SQL或其他关系型数据库的连接操作;DataFrame对象的实例方法combine_first
可以将重复数据编接在一起,用一个对象中的值填充另一个对象中的缺失值
轴向连接
pd.concat()
函数的参数如下所示:
pd.concat(objs, axis=0, join='outer', join_axes=None, ignore_index=False,
keys=None, levels=None, names=None, verify_integrity=False, copy=True)
参数 | 说明 |
---|---|
objs | 参与连接的Pandas对象的列表。 |
axis | 默认为0(按横轴合并) |
ignore_index | 布尔值,默认为False。如果为True,则不使用连接轴上的索引值。生成的轴将被标记为0,...,n - 1。如果连接对象的连接轴没有有意义的索引信息,则这非常有用。注意其他轴上的索引值仍然按照join指定的方式处理 |
keys | 序列,默认为None。使用该序列构建层次化索引,且该索引在最外层。如果存在多个级别,应该使用元组序列指定 |
join | {'inner','outer'},默认'outer'。'outer'表示取并集,'inner'表示取交集 |
join_axes | 指定其他轴上的索引,不执行并集或者交集运算 |
数据融合merge
pd.merge(left, right, how='inner', on=None, left_on=None, right_on=None,
left_index=False, right_index=False, sort=True, suffixes=('_x', '_y'),
copy=True, indicator=False, validate=None)
三种融合方式:
-
一对一融合(one-to-one joins),因为左侧DataFrame的“key”的数值都是唯一的,“K0”、“K1”和“K2”只有一个取值,右侧DataFrame亦是如此,所以这种融合方式被称为一对一融合。
-
多对一融合(many-to-one joins):其中一个DataFrame的键所在列的取值是唯一的,另一个DataFrame的键所在列的取值不是唯一的,这种情况多出现在索引与列融合的时候;
-
多对多融合(many-to-many joins):两个DataFrame的键所在列的取值都不是唯一的,这种情况多出现在列与列融合的时候。
参数 | 说明 |
---|---|
left | 参与合并的左侧DataFrame |
right | 参与合并的右侧DataFrame |
how | {'left', 'right', 'outer', 'inner'},默认为'inner' |
on | 用于连接的列名。必须包含在左右两个DataFrame中。如果未指定,并且left_index和right_index是False,则左右两个DataFrame列名的交集将作为连接键 |
left_on | 左侧DataFrame中用作连接键的列 |
right_on | 右侧DataFrame中用作连接键的列 |
left_index | {True, False},将左侧的行索引用作其连接键 |
right_index | {True, False},将右侧的行索引用作其连接键 |
sort | 根据连接键对合并后的数据进行排序,默认为True。有时在处理大数据集时,禁用该选项可获得更好的性能 |
suffixes | 字符串值元祖,用于追加到重叠列名的末尾,默认为('_x','_y')。例如,如果左右两个DataFrame对象都有"data",则结果中就会出现"data_x"和"data_y" |
数据融合join
索引-索引融合
pd.merge(left, right, left_index=True, right_index=True)
默认情况下,join实现的是在连接键上做左连接:
left.join(right, how='inner')
索引-列融合
left.join(right, on=key_or_keys)
数据融合combine_first
根据一个DataFrame对象的值为另外一个DataFrame对象做缺失值填补。
它实现了:在融合过程中,用参数对象中的数据为调用者对象的缺失数据“打补丁”,并且会自动对齐索引。
根据df1中的值去填补df2中的缺失值:
df2.combine_first(df1)
网友评论