zoukankan      html  css  js  c++  java
  • pandas的学习6-合并concat

    import  pandas as pd
    import  numpy as  np
    
    '''
    pandas处理多组数据的时候往往会要用到数据的合并处理,使用 concat是一种基本的合并方式.
    而且concat中有很多参数可以调整,合并成你想要的数据形式.
    '''
    
    # todo axis (合并方向)
    
    # axis=0是预设值,因此未设定任何参数时,函数默认axis=0。
    
    #定义资料集
    df1 = pd.DataFrame(np.ones((3,4))*0, columns=['a','b','c','d'])
    df2 = pd.DataFrame(np.ones((3,4))*1, columns=['a','b','c','d'])
    df3 = pd.DataFrame(np.ones((3,4))*2, columns=['a','b','c','d'])
    
    #concat纵向合并
    res = pd.concat([df1, df2, df3], axis=0)  #vertical stack
    
    #打印结果
    print(res)
    #     a    b    c    d
    # 0  0.0  0.0  0.0  0.0
    # 1  0.0  0.0  0.0  0.0
    # 2  0.0  0.0  0.0  0.0
    # 0  1.0  1.0  1.0  1.0
    # 1  1.0  1.0  1.0  1.0
    # 2  1.0  1.0  1.0  1.0
    # 0  2.0  2.0  2.0  2.0
    # 1  2.0  2.0  2.0  2.0
    # 2  2.0  2.0  2.0  2.0
    
    
    # todo 仔细观察会发现结果的index是0, 1, 2, 0, 1, 2, 0, 1, 2,若要将index重置,请看例子二。
    
    # ignore_index (重置 index)
    
    #承上一个例子,并将index_ignore设定为True
    res = pd.concat([df1, df2, df3], axis=0, ignore_index=True)
    
    #打印结果
    print(res)
    #     a    b    c    d
    # 0  0.0  0.0  0.0  0.0
    # 1  0.0  0.0  0.0  0.0
    # 2  0.0  0.0  0.0  0.0
    # 3  1.0  1.0  1.0  1.0
    # 4  1.0  1.0  1.0  1.0
    # 5  1.0  1.0  1.0  1.0
    # 6  2.0  2.0  2.0  2.0
    # 7  2.0  2.0  2.0  2.0
    # 8  2.0  2.0  2.0  2.0
    # 结果的index变0, 1, 2, 3, 4, 5, 6, 7, 8
    
    
    '''
    join (合并方式)
    join='outer'为预设值,因此未设定任何参数时,函数默认join='outer'。
    此方式是依照column来做纵向合并,有相同的column上下合并在一起,其他独自的column个自成列,原本没有值的位置皆以NaN填充。
    '''
    #定义资料集
    df1 = pd.DataFrame(np.ones((3,4))*0, columns=['a','b','c','d'], index=[1,2,3])
    df2 = pd.DataFrame(np.ones((3,4))*1, columns=['b','c','d','e'], index=[2,3,4])
    
    #纵向"外"合并df1与df2
    res = pd.concat([df1, df2], axis=0, join='outer')
    
    print(res)
    #     a    b    c    d    e
    # 1  0.0  0.0  0.0  0.0  NaN
    # 2  0.0  0.0  0.0  0.0  NaN
    # 3  0.0  0.0  0.0  0.0  NaN
    # 2  NaN  1.0  1.0  1.0  1.0
    # 3  NaN  1.0  1.0  1.0  1.0
    # 4  NaN  1.0  1.0  1.0  1.0
    
    #todo 原理同上个例子的说明,但只有相同的column合并在一起,其他的会被抛弃。
    
    #承上一个例子
    
    #纵向"内"合并df1与df2
    res = pd.concat([df1, df2], axis=0, join='inner')
    
    #打印结果
    print(res)
    #     b    c    d
    # 1  0.0  0.0  0.0
    # 2  0.0  0.0  0.0
    # 3  0.0  0.0  0.0
    # 2  1.0  1.0  1.0
    # 3  1.0  1.0  1.0
    # 4  1.0  1.0  1.0
    
    #重置index并打印结果
    res = pd.concat([df1, df2], axis=0, join='inner', ignore_index=True)
    print(res)
    #     b    c    d
    # 0  0.0  0.0  0.0
    # 1  0.0  0.0  0.0
    # 2  0.0  0.0  0.0
    # 3  1.0  1.0  1.0
    # 4  1.0  1.0  1.0
    # 5  1.0  1.0  1.0
    
    
    # join_axes (依照 axes 合并) 坐标轴合并
    
    #定义资料集
    df1 = pd.DataFrame(np.ones((3,4))*0, columns=['a','b','c','d'], index=[1,2,3])
    df2 = pd.DataFrame(np.ones((3,4))*1, columns=['b','c','d','e'], index=[2,3,4])
    
    #依照`df1.index`进行横向合并
    res = pd.concat([df1, df2], axis=1, join_axes=[df1.index])#根据谁的index来的
    
    #打印结果
    print(res)
    #index的原因
    #     a    b    c    d    b    c    d    e
    # 1  0.0  0.0  0.0  0.0  NaN  NaN  NaN  NaN
    # 2  0.0  0.0  0.0  0.0  1.0  1.0  1.0  1.0
    # 3  0.0  0.0  0.0  0.0  1.0  1.0  1.0  1.0
    
    #移除join_axes,并打印结果
    res = pd.concat([df1, df2], axis=1)
    print(res)
    #     a    b    c    d    b    c    d    e
    # 1  0.0  0.0  0.0  0.0  NaN  NaN  NaN  NaN
    # 2  0.0  0.0  0.0  0.0  1.0  1.0  1.0  1.0
    # 3  0.0  0.0  0.0  0.0  1.0  1.0  1.0  1.0
    # 4  NaN  NaN  NaN  NaN  1.0  1.0  1.0  1.0
    
    # append (添加数据)  纵向才是添加数据嘛,横向是增加数据的维度,就不是append了
    # append只有纵向合并,没有横向合并。
    
    #定义资料集
    df1 = pd.DataFrame(np.ones((3,4))*0, columns=['a','b','c','d'])
    df2 = pd.DataFrame(np.ones((3,4))*1, columns=['a','b','c','d'])
    df3 = pd.DataFrame(np.ones((3,4))*1, columns=['a','b','c','d'])
    s1 = pd.Series([1,2,3,4], index=['a','b','c','d'])
    
    #将df2合并到df1的下面,以及重置index,并打印出结果
    res = df1.append(df2, ignore_index=True)
    print(res)
    #     a    b    c    d
    # 0  0.0  0.0  0.0  0.0
    # 1  0.0  0.0  0.0  0.0
    # 2  0.0  0.0  0.0  0.0
    # 3  1.0  1.0  1.0  1.0
    # 4  1.0  1.0  1.0  1.0
    # 5  1.0  1.0  1.0  1.0
    
    #合并多个df,将df2与df3合并至df1的下面,以及重置index,并打印出结果
    res = df1.append([df2, df3], ignore_index=True)
    print(res)
    #     a    b    c    d
    # 0  0.0  0.0  0.0  0.0
    # 1  0.0  0.0  0.0  0.0
    # 2  0.0  0.0  0.0  0.0
    # 3  1.0  1.0  1.0  1.0
    # 4  1.0  1.0  1.0  1.0
    # 5  1.0  1.0  1.0  1.0
    # 6  1.0  1.0  1.0  1.0
    # 7  1.0  1.0  1.0  1.0
    # 8  1.0  1.0  1.0  1.0
    
    #合并series,将s1合并至df1,以及重置index,并打印出结果
    res = df1.append(s1, ignore_index=True)
    print(res)
    #     a    b    c    d
    # 0  0.0  0.0  0.0  0.0
    # 1  0.0  0.0  0.0  0.0
    # 2  0.0  0.0  0.0  0.0
    # 3  1.0  2.0  3.0  4.0
    

     concat是一种基本的合并方式,但是concat有很多参数可以调整

    axis=0是预设值,也就是默认就为vertical合并

    ignore_index=true 这个参数用于忽略以前的index,生成新的有序的index

    join合并  join=‘outer’为预设值,按照column做纵向合并,去重功能,不够的用nan填充

    inner模式就不存在nan,相当于outer模式合并后去掉有nan的所有列

    join_axes是concat的一个参数,join_axes=[df1.index]表示按照df1的index进行合并,axis=1(表示横向 增加维度)

    比如df1有1,2,3 ,但是df2只有2,3,4此时会舍弃df2的4,并且后半部分1为空

    append为添加数据  vertical stack

    出处:https://morvanzhou.github.io/tutorials/data-manipulation/np-pd/3-6-pd-concat/

  • 相关阅读:
    四 闭包函数、装饰器
    三 名称空间与作用域
    二 函数对象、函数嵌套
    一 函数定义
    函数路线
    Django_rest_framework分页
    Django Rest framework序列化流程
    Django Rest framework的限流实现流程
    mysql 数据库查看表的信息
    java JDBC编程流程步骤
  • 原文地址:https://www.cnblogs.com/simon-idea/p/9571805.html
Copyright © 2011-2022 走看看