数据统计中,通常,我们作用的不止一张表,对应的DataFrame也会有几个。有时候,两张或几张有关联的表需要进行合并处理。padans提供了merge,join,concat等方法。下边,就整理记录一下下。
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)
下边,对这些参数一一解释:
left: 第一个DataFrame
right: 第二个DataFrame
how: 指合并的方式,有内连接(inner),外连接(outer),左连接(left),右连接(right)。
内连接,只关联指定索引相同的值的行列。
左连接,除了完整的第一个DataFrame外,还有第二个DataFrame关联上的行的值。没关联上的取NaN。
右连接,和左连接相反。除了完整的第二个DataFrame外,还有第一个DataFrame关联上的行的值。没关联上的取NaN
外关联。两个DataFrame,关联上的合并为一行,其他没关联上的独自为一行。然后以NaN补齐。
on: 两个DataFrame相互关联的列的头(也可以理解为数据库的字段)。当然,两个DataFrame的列的头可以不一样。不过那需要设置left_on,和right_on。
left_on:两个DataFrame关联,第一个DataFrame关联对应的头(字段)。
right_on:两个DataFrame关联,第二个DataFrame关联对应的头(字段)。
left_index:使用第一个DataFrame中的行索引做为连接键
right_index:使用第二个DataFrame中的行索引做为连接键
sort:默认为True,将合并的数据进行排序。在大多数情况下设置为False可以提高性能
suffixes:字符串值组成的元组,用于指定当左右DataFrame存在相同列名时在列名后面附加的后缀名称,默认为(‘_x’,’_y’)。通俗点讲就是两个表中都有相同的头,就是字段。比如第一个DataFrame中有个字段uid,第二个DataFrame中也有uid,合并为一行之后,这两个字段的名字就变为uid_x和uid_y,该一列对应的数据没有改变。默认是x,y。这里就是手动设置的地方。
copy:默认为True,总是将数据复制到数据结构中;大多数情况下设置为False可以提高性能。
indicator:在 0.17.0中还增加了一个显示合并数据中来源情况;如只来自己于左边(left_only)、两者(both)
merge的几个特性:
1,参数如果只有两个DataFrame,没其他的参数。那么,就以两个DataFrame相同的字段进行关联。如果没有相同键或相同键没有相同的值,那么merge后返回的就是一个Empty的DataFrame。
2,多个键进行关联时,就把多个需要关联的键放在一个list中给on就行了。
join(self, other, on=None, how='left', lsuffix='',
rsuffix='', sort=False)