pandas merge 和 concat

merge是按照列值或索引值进行连接,concat是按照轴进行拼接。

一,merge

数据库风格的连接是merge,

DataFrame.merge(right, how='inner', on=None, left_on=None, right_on=None, left_index=False, right_index=False, sort=False, suffixes=('_x', '_y'), indicator=False, validate=None)

参数注释:

right:右侧数据集

how:连接的类型,有效值是:{‘left’, ‘right’, ‘outer’, ‘inner’, ‘cross’},默认值是inner

用于指定连接的字段:

  • on:用于连接的字段,该字段同时存在于左表和右表
  • left_on、right_on:用于指定用于连接的字段
  • left_index、right_index:用于指定用于连接的索引

sort:是否排序

suffixes:元组类型,用于为同名的字段设置后缀 

indicator:如果设置为Ture,则在输出 DataFrame 中添加一个名为“_merge”的列,其中包含有关每行来源的信息;为该参数设置为一个字符串,用于为该列设置名称。该列的有效值是:left_only,right_only和both,分别表示只出现在左表,只出现在右表和两表同时存在。

validate:用于指定关系的类型,有效值是one_to_one,one_to_many,many_to_one和many_to_many

举个例子,有以下两个数据集,

df1 = pd.DataFrame({'lkey': ['foo', 'bar', 'baz', 'foo'],
                    'value': [1, 2, 3, 5]})
df2 = pd.DataFrame({'rkey': ['foo', 'bar', 'baz', 'foo'],
                    'value': [5, 6, 7, 8]})
df1
    lkey value
0   foo      1
1   bar      2
2   baz      3
3   foo      5
df2
    rkey value
0   foo      5
1   bar      6
2   baz      7
3   foo      8

df1是左表,右表是df2,两表进行inner join,结果如下所示:

df1.merge(df2, left_on='lkey', right_on='rkey')
  lkey  value_x rkey  value_y
0  foo        1  foo        5
1  foo        1  foo        8
2  foo        5  foo        5
3  foo        5  foo        8
4  bar        2  bar        6
5  baz        3  baz        7

二,concat

沿特定轴连接DataFrame 或Series

pandas.concat(objs, axis=0, join='outer', ignore_index=False, verify_integrity=False, sort=False)

参数注释:

objs:用于concat的对象列表

axis:沿着哪一个轴,0代表列,1代表行。

join:如何处理其他轴上的索引,有效值是inner和outer,默认值是outer

ignore_index:如果设置为True,那么返回的结果使用默认的索引,即从0到n-1,默认值是False,不忽略原始索引。

创建多级索引(MultiIndex)

  • keys:作为多级索引最外层的索引值
  • levels:如果设置keys参数,那么levels用于指定多级索引的各个级别
  • names:如果设置keys参数,那么names用于指定多级索引各个级别的名称

verify_integrity:用于检查结果集的索引是否有重复

举个例子,两个序列进行拼接,不忽略原始索引。

s1 = pd.Series(['a', 'b'])
s2 = pd.Series(['c', 'd'])
pd.concat([s1, s2])
0    a
1    b
0    c
1    d
dtype: object

如果忽略原始索引,那么结果集会生成一个从0到n-1的默认索引:

pd.concat([s1, s2], ignore_index=True)
0    a
1    b
2    c
3    d
dtype: object

在拼接序列时,使用keys参数创建多级索引最外层的一个索引:

pd.concat([s1, s2], keys=['s1', 's2'])
s1  0    a
    1    b
s2  0    c
    1    d
dtype: object

 

 

 

参考文档:

posted @ 2022-08-11 17:04  悦光阴  阅读(828)  评论(0编辑  收藏  举报