第7章 数据规整化:清理、转换、合并、重塑 (1)

来源:互联网 发布:重装系统安装不了软件 编辑:程序博客网 时间:2024/05/17 23:18

第7章 数据规整化:清理、转换、合并、重塑 (1)

DataFrame.merge()

merge()用于对列的合并

import pandas as pd;import numpy as npfrom pandas import Series,DataFramedf1 = DataFrame({'key':['b','b','a','c','a','a','b'],                 'data1':range(7)})df2 = DataFrame({'key':['a','b','d'],                 'data2':range(3)})###df1   data1 key0      0   b1      1   b2      2   a3      3   c4      4   a5      5   a6      6   b###df2   data2 key0      0   a1      1   b2      2   d##merge()不指定用哪个列连接时,会将重叠列的列名当作键,不推荐pd.merge(df1,df2)#######Output############   data1 key  data20      0   b      11      1   b      12      6   b      13      2   a      04      4   a      05      5   a      0##on用来指定连接的列pd.merge(df1,df2,on='key')#######Output############   data1 key  data20      0   b      11      1   b      12      6   b      13      2   a      04      4   a      05      5   a      0##---merge()合并默认是"inner"连接,即取键的交集,除此以外还有"left""right""outer","outer"是取键并集,包括左连接右连接,用参数"how"指定pd.merge(df1,df2,on='key',how='outer')#######Output############   data1 key  data20    0.0   b    1.01    1.0   b    1.02    6.0   b    1.03    2.0   a    0.04    4.0   a    0.05    5.0   a    0.06    3.0   c    NaN7    NaN   d    2.0pd.merge(df1,df2,on='key',how='left')#######Output############   data1 key  data20      0   b    1.01      1   b    1.02      2   a    0.03      3   c    NaN4      4   a    0.05      5   a    0.06      6   b    1.0pd.merge(df1,df2,on='key',how='right')#######Output############   data1 key  data20    0.0   b      11    1.0   b      12    6.0   b      13    2.0   a      04    4.0   a      05    5.0   a      06    NaN   d      2####上述情况中两个DataFrame合并的列有同样的名字,如果名字不同,可以分别指定,此时不会合并为一列,保留各自列的名字df3 = DataFrame({'lkey':['b','b','a','c','a','a','c'],                 'data1':range(7)})df4 = DataFrame({'rkey':['a','b','d'],                 'data2':range(3)})###df3   data1 lkey0      0    b1      1    b2      2    a3      3    c4      4    a5      5    a6      6    c###df4   data2 rkey0      0    a1      1    b2      2    dpd.merge(df3,df4,left_on='lkey',right_on='rkey')#######Output############   data1 lkey  data2 rkey0      0    b      1    b1      1    b      1    b2      2    a      0    a3      4    a      0    a4      5    a      0    a###多对多合并操作df5 = DataFrame({'key':['b','b','a','c','a','b'],                 'data1':range(6)})df6 = DataFrame({'key':['a','b','a','b','d'],                 'data2':range(5)})###df5   data1 key0      0   b1      1   b2      2   a3      3   c4      4   a5      5   b###df6   data2 key0      0   a1      1   b2      2   a3      3   b4      4   d####左连接pd.merge(df5,df6,on = 'key',how='left')#######Output############    data1 key  data20       0   b    1.01       0   b    3.02       1   b    1.03       1   b    3.04       2   a    0.05       2   a    2.06       3   c    NaN7       4   a    0.08       4   a    2.09       5   b    1.010      5   b    3.0####多对多连接产生的行是笛卡尔乘积####内连接pd.merge(df5,df6,on='key',how='inner')#######Output############   data1 key  data20      0   b      11      0   b      32      1   b      13      1   b      34      5   b      15      5   b      36      2   a      07      2   a      28      4   a      09      4   a      2#####多个键合并left = DataFrame({'key1':['foo','foo','bar'],                  'key2':['one','two','one'],                  'lval':[1,2,3]})right = DataFrame({'key1':['foo','foo','bar','bar'],                   'key2':['one','one','one','two'],                   'rval':[4,5,6,7]})###left  key1 key2  lval0  foo  one     11  foo  two     22  bar  one     3###right  key1 key2  rval0  foo  one     41  foo  one     52  bar  one     63  bar  two     7###传入由列名组成的列表pd.merge(left,right,on=['key1','key2'],how='outer')#######Output############  key1 key2  lval  rval0  foo  one   1.0   4.01  foo  one   1.0   5.02  foo  two   2.0   NaN3  bar  one   3.0   6.04  bar  two   NaN   7.0####合并后对重复列名的处理,suffixes可用于指定附加在两个对象重复列名后面的后缀pd.merge(left,right,on='key1')#出现key2列名重复#######Output############  key1 key2_x  lval key2_y  rval0  foo    one     1    one     41  foo    one     1    one     52  foo    two     2    one     43  foo    two     2    one     54  bar    one     3    one     65  bar    one     3    two     7####suffixes=('','')pd.merge(left,right,on='key1',suffixes=('left','right'))#######Output############  key1 key2left  lval key2right  rval0  foo      one     1       one     41  foo      one     1       one     52  foo      two     2       one     43  foo      two     2       one     54  bar      one     3       one     65  bar      one     3       two     7

Merge()函数参数

参数 说明 left 参与合并的左侧DataFrame right 参与合并的右侧DataFrame how “inner”,”outer”,”left”,”right”其中之一,默认为”inner” on 用于连接的列名,必须存在左右两个DataFrame中,如果不指定,其他连接键也不指定,以left和right列名的交集作为连接键 left_on 左侧DataFrame用作连接键的列 right_on 右侧DataFrame用作连接键的列 left_index 左侧行索引作为连接键 right_index 右侧行索引作为连接键 sort 根据连接键对合并后数据进行排序,默认为True,处理大数据时,禁用能获得更好性能 suffixes 追加到重叠列名末尾,用于区分,默认是=(‘_x’,’_y’) copy 默认为True。禁用可以避免将数据复制到结果数据结构中
阅读全文
0 0
原创粉丝点击