6.数据合并

数据合并特指两个文件或者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)

你可能感兴趣的:(6.数据合并)