数据合并

    合并 — concat

    1. import numpy as np
    2. import pandas as pd
    1. #合并两个series
    2. s1 = pd.Series(['a', 'b'])
    3. s2 = pd.Series(['c', 'd'])
    4. pd.concat([s1, s2])
    1. 0 a
    2. 1 b
    3. 0 c
    4. 1 d
    5. dtype: object
    1. # 忽略存在得index,并且重新设定index值
    2. pd.concat([s1,s2],ignore_index=True)
    1. 0 a
    2. 1 b
    3. 2 c
    4. 3 d
    5. dtype: object
    1. # 增加复合索引
    2. pd.concat([s1,s2],keys=['s1','s2'])
    1. s1 0 a
    2. 1 b
    3. s2 0 c
    4. 1 d
    5. dtype: object
    1. # 合并两个DataFrame
    2. df1 = pd.DataFrame([['a', 1], ['b', 2]],columns= ['letter', 'number'])
    3. df2 = pd.DataFrame([['c', 3], ['d', 4]],columns= ['letter', 'number'])
    4. df1
    5. df2
    6. pd.concat([df1, df2])
    letter number
    0 a 1
    1 b 2
    0 c 3
    1 d 4
    1. # 将DataFrame具有重叠列的对象合并,缺失值将填充NaN值
    2. df3 = pd.DataFrame([['c', 3, 'cat'], ['d', 4, 'dog']], columns=['letter', 'number', 'animal'])
    3. pd.concat([df1,df3],sort=False)
    letter number animal
    0 a 1 NaN
    1 b 2 NaN
    0 c 3 cat
    1 d 4 dog
    1. # 合并DataFrame具有重叠列,并仅通过传递inner给join关键字参数 返回那些共享的对象
    2. pd.concat([df1, df3], join="inner")
    letter number
    0 a 1
    1 b 2
    0 c 3
    1 d 4
    1. # DataFrame传入,沿x轴水平合并对象axis=1
    2. df4 = pd.DataFrame([['bird', 'polly'], ['monkey', 'george']],columns=['animal', 'name'])
    3. pd.concat([df1, df4], axis=1)
    letter number animal name
    0 a 1 bird polly
    1 b 2 monkey george
    1. #纵向合并:纵向堆叠,需要区分情况。
    2. #横向合并:横向堆叠,即将两个表在X轴向拼接在一起,可以使用concat函数完成

    join

    1. DataFrame.join(other, on=None, how='left', lsuffix='', rsuffix='', sort=False)
    1. df = pd.DataFrame({'key': ['K0', 'K1', 'K2', 'K3', 'K4', 'K5'],
    2. 'A': ['A0', 'A1', 'A2', 'A3', 'A4', 'A5']})
    3. df
    key A
    0 K0 A0
    1 K1 A1
    2 K2 A2
    3 K3 A3
    4 K4 A4
    5 K5 A5
    1. other = pd.DataFrame({'key': ['K0', 'K1', 'K2'],
    2. 'B': ['B0', 'B1', 'B2']})
    3. other
    key B
    0 K0 B0
    1 K1 B1
    2 K2 B2
    1. df.join(other, how='inner',lsuffix='_caller', rsuffix='_other')
    key_caller A key_other B
    0 K0 A0 K0 B0
    1 K1 A1 K1 B1
    2 K2 A2 K2 B2

    merge

    1. pd.merge(left, right, how='inner', on=None, left_on=None,right_on=None,left_index=False, right_index=False)
    1. #参数名称 说明
    2. #left 接收DataFrame,左表,无默认。
    3. #right 接收DataFrame或Series。右表,无默认。
    4. #how {‘left’, ‘right’, ‘outer’, ‘inner’}, default ‘inner’
    5. #on 接收string或sequence。表示外键字段名。
    6. #left_on 关联操作时左表中的关联字段名。
    7. #right_on 关联操作时右表中的关联字段名。
    8. #left_index 是否将左表的index作为连接主键。(False)
    9. #right_index 是否将右表的index作为连接主键。(False)
    10. #sort 是否根据连接键对合并后的数据进行排序。(False)
    11. #suffixes tuple。合并后左表与右表重叠列名的别名尾缀。默认为('x', 'y')。