• 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

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

    1. df1 = pd.DataFrame({'lkey': ['foo', 'bar', 'baz', 'foo'],
    2. 'value': [1, 2, 3, 5]})
    3. df2 = pd.DataFrame({'rkey': ['foo', 'bar', 'baz', 'foo'],
    4. 'value': [5, 6, 7, 8]})
    5. df1
    6. lkey value
    7. 0 foo 1
    8. 1 bar 2
    9. 2 baz 3
    10. 3 foo 5
    11. df2
    12. rkey value
    13. 0 foo 5
    14. 1 bar 6
    15. 2 baz 7
    16. 3 foo 8

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

    1. df1.merge(df2, left_on='lkey', right_on='rkey')
    2. lkey value_x rkey value_y
    3. 0 foo 1 foo 5
    4. 1 foo 1 foo 8
    5. 2 foo 5 foo 5
    6. 3 foo 5 foo 8
    7. 4 bar 2 bar 6
    8. 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:用于检查结果集的索引是否有重复

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

    1. s1 = pd.Series(['a', 'b'])
    2. s2 = pd.Series(['c', 'd'])
    3. pd.concat([s1, s2])
    4. 0 a
    5. 1 b
    6. 0 c
    7. 1 d
    8. dtype: object

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

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

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

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

    参考文档:

  • 相关阅读:
    安卓相关基础知识整理
    大数据-Hadoop-基础篇-第二章-介绍
    链表OJ题(1)
    明天报名!!济宁教师招聘报名照片及常见问题
    BUUCTF 九连环 1
    笔试强训(一)
    SVG公众号排版 | 可重复点击显示和关闭图片,在Apple上无法正常关闭
    阿里大牛解析淘宝与Twitter 分布式系统案例与其架构设计原来源码
    在 MySQL 中优化分页的 3 种方法
    Lanbda表达式
  • 原文地址:https://blog.csdn.net/upluck/article/details/126291188