zoukankan      html  css  js  c++  java
  • Pandas学习之四:修改增加

    修改DataFrame

    insert(...)

    insert(self, 
           loc,  # int 使用整数定义_列数据_插入的位置,必须是0到columns列标签的长度  
           column,  # 可选字符串、数字或者object;列标签名
           value,  # 整数、Series或者数组型数据 
           allow_duplicates=False  # 可选参数,如果dataframe中已经存在某列,将allow_duplicates置为true才可以将指定得列插入。
          ) -> None:
    

    实战详解

    ############################
    # DataFrame的拼接
    ############################
    df1 = pd.DataFrame(
            {
                'A': ['A0', 'A1', 'A2', 'A3'],
                'B': ['B0', 'B1', 'B2', 'B3'],
                'C': ['C0', 'C1', 'C2', 'C3'],
                'D': ['D0', 'D1', 'D2', 'D3']
            },
            index=[0, 1, 2, 3])
    
    df2 = pd.DataFrame(
            {
                'A': ['A4', 'A5', 'A6', 'A7'],
                'B': ['B4', 'B5', 'B6', 'B7'],
                'C': ['C4', 'C5', 'C6', 'C7'],
                'D': ['D4', 'D5', 'D6', 'D7']
            },
            index=[4, 5, 6, 7])
    
    df3 = pd.DataFrame(
            {
                'A': ['A8', 'A9', 'A10', 'A11'],
                'B': ['B8', 'B9', 'B10', 'B11'],
                'C': ['C8', 'C9', 'C10', 'C11'],
                'D': ['D8', 'D9', 'D10', 'D11']
            },
            index=[8, 9, 10, 11])
    
    frames = [df1, df2, df3]
    result = pd.concat(frames)
    print(result)
    '''
    A    B    C    D
    0    A0   B0   C0   D0
    1    A1   B1   C1   D1
    2    A2   B2   C2   D2
    3    A3   B3   C3   D3
    4    A4   B4   C4   D4
    5    A5   B5   C5   D5
    6    A6   B6   C6   D6
    7    A7   B7   C7   D7
    8    A8   B8   C8   D8
    9    A9   B9   C9   D9
    10  A10  B10  C10  D10
    11  A11  B11  C11  D11
    '''
    
    ########################################
    # keys参数,添加外层索引
    ########################################
    result = pd.concat(frames, keys=['x', 'y', 'z'])
    # result = pd.concat(frames, keys=['x', 'y'])  # 少df3
    # result = pd.concat(frames, keys=['x', 'y', 'z', 'w'])  # 无影响
    print(result)
    '''
            A    B    C    D
    x 0    A0   B0   C0   D0
      1    A1   B1   C1   D1
      2    A2   B2   C2   D2
      3    A3   B3   C3   D3
    y 4    A4   B4   C4   D4
      5    A5   B5   C5   D5
      6    A6   B6   C6   D6
      7    A7   B7   C7   D7
    z 8    A8   B8   C8   D8
      9    A9   B9   C9   D9
      10  A10  B10  C10  D10
      11  A11  B11  C11  D11
    '''
    
    df4 = pd.DataFrame(
            {
                'B': ['B2', 'B3', 'B6', 'B7'],
                'D': ['D2', 'D3', 'D6', 'D7'],
                'F': ['F2', 'F3', 'F6', 'F7']
            },
            index=[2, 3, 6, 10])
    
    result = pd.concat([df1, df4])
    print(result)
    '''
     A   B    C   D    F
    0   A0  B0   C0  D0  NaN
    1   A1  B1   C1  D1  NaN
    2   A2  B2   C2  D2  NaN
    3   A3  B3   C3  D3  NaN
    2  NaN  B2  NaN  D2   F2
    3  NaN  B3  NaN  D3   F3
    6  NaN  B6  NaN  D6   F6
    7  NaN  B7  NaN  D7   F7
    '''
    ##########################################
    # axis参数,连接方式
    ##########################################
    result = pd.concat([df1, df4], axis=1)
    print(result)
    '''
    A    B    C    D    B    D    F
    0    A0   B0   C0   D0  NaN  NaN  NaN
    1    A1   B1   C1   D1  NaN  NaN  NaN
    2    A2   B2   C2   D2   B2   D2   F2
    3    A3   B3   C3   D3   B3   D3   F3
    6   NaN  NaN  NaN  NaN   B6   D6   F6
    10  NaN  NaN  NaN  NaN   B7   D7   F7
    '''
    
    ####################################################
    # join参数
    # 'inner': 交集
    # 'outer': 并集
    ####################################################
    result = pd.concat([df1, df4], join='inner')
    print(result)
    '''
    B   D
    0  B0  D0
    1  B1  D1
    2  B2  D2
    3  B3  D3
    2  B2  D2
    3  B3  D3
    6  B6  D6
    10  B7  D7
    '''
    # ignore_index 在新版中该参数已经淘汰了
    
    ##############################################
    # ingore_index的应用
    #################################################
    result = pd.concat([df1, df4], join='inner', ignore_index=True)
    print(result)
    '''
    B   D
    0  B0  D0
    1  B1  D1
    2  B2  D2
    3  B3  D3
    4  B2  D2
    5  B3  D3
    6  B6  D6
    7  B7  D7
    '''
    

    append(...)

    追加DataFrame

    本质调用的是contcat(...)

    append(
            self, other, ignore_index=False, verify_integrity=False, sort=False
        ) -> "DataFrame": pass
    # 参数说明
    # other:DataFrame、series、dict、list这样的数据结构
    # ignore_index:默认值为False,如果为True则不使用index标签
    # verify_integrity :默认值为False,如果为True当创建相同的index时会抛出ValueError的异常
    # sort:boolean,默认是None,该属性在pandas的0.23.0的版本才存在。
    
    #############################
    # 第一种(追加DataFrame):(2, 2) (2, 1) -> (4, 3), 有值存值,无值存NaN
    #############################
    df = pd.DataFrame([[1, 2], [3, 4]], columns=list('AB'))
    df1 = pd.DataFrame([[3], [5]], columns=list('C'))
    df = df.append(df1, ignore_index=True)
    print(df.shape)
    print(df)
    ''' (4, 3)
    	A    B    C
    0  1.0  2.0  NaN
    1  3.0  4.0  NaN
    2  NaN  NaN  3.0
    3  NaN  NaN  5.0
    '''
    
    #############################
    # 第二种(字典Dict):(4, 3) (5, 2) -> (9, 3), 有值存值,无值存NaN
    #############################
    for i in range(5):
        df = df.append({'A': i, 'B': i+2}, ignore_index=True)
    print(df)
    ''' (9, 3)
    	A    B    C
    0  1.0  2.0  NaN
    1  3.0  4.0  NaN
    2  NaN  NaN  3.0
    3  NaN  NaN  5.0
    4  0.0  2.0  NaN
    5  1.0  3.0  NaN
    6  2.0  4.0  NaN
    7  3.0  5.0  NaN
    8  4.0  6.0  NaN
    '''
    
    #############################
    # 第三种(concat拼接):有值存值,无值存NaN
    #############################
    df = pd.concat([pd.DataFrame([i], columns=['A']) for i in range(5)], ignore_index=True)
    print(df)
    '''
       A
    0  0
    1  1
    2  2
    3  3
    4  4
    '''
    
    #############################
    # 第四种(追加Series):(5, 1) (1, 2) -> (6, 3)有值存值,无值存NaN
    #############################
    	A    x    y
    0  0.0  NaN  NaN
    1  1.0  NaN  NaN
    2  2.0  NaN  NaN
    3  3.0  NaN  NaN
    4  4.0  NaN  NaN
    a  NaN  1.0  2.0
    
    #############################
    # 第五种(追加List,一维和二维):
    # 一维:(0, 3) (1, 2) -> (1,)有值存值,无值存NaN
    #############################
    df = pd.DataFrame(columns=['a', 'b', 'c'])
    df = df.append([[1, 2, 3], ['a', 'b', 'c']])
    df = df.append([4, 5])
    print(df)
    '''
         a    b    c  0    1    2
    0  NaN  NaN  NaN  1    2    3
    1  NaN  NaN  NaN  a    b    c
    0  NaN  NaN  NaN  4  NaN  NaN
    1  NaN  NaN  NaN  5  NaN  NaN
    
    # 追加交换位置
    	0    1    2    a    b    c
    0  4  NaN  NaN  NaN  NaN  NaN
    1  5  NaN  NaN  NaN  NaN  NaN
    0  1    2    3  NaN  NaN  NaN
    1  a    b    c  NaN  NaN  NaN
    '''
    

    concat(...)

    def concat(
        objs: Union[Iterable[FrameOrSeries], Mapping[Label, FrameOrSeries]],
        axis=0,
        join="outer",
        ignore_index: bool = False,
        keys=None,
        levels=None,
        names=None,
        verify_integrity: bool = False,
        sort: bool = False,
        copy: bool = True,
    ) -> FrameOrSeriesUnion: pass
    # 参数说明
    # objs:Series,DataFrame或Panel对象的序列或映射。如果传递了dict,则排序的键将用作键参数,除非它被传递,在这种情况下,将选择值(见下文)。任何无对象将被静默删除,除非它们都是无,在这种情况下将引发一个ValueError。
    # axis:{0,1,...},默认为0。沿着连接的轴。
    # join:{'inner','outer'},默认为“outer”。如何处理其他轴上的索引。outer为联合和inner为交集。
    # ignore_index:boolean,default False。如果为True,请不要使用并置轴上的索引值。结果轴将被标记为0,...,n-1。如果要连接其中并置轴没有有意义的索引信息的对象,这将非常有用。注意,其他轴上的索引值在连接中仍然受到尊重。
    # join_axes:Index对象列表。用于其他n-1轴的特定索引,而不是执行内部/外部设置逻辑。
    # keys:序列,默认值无。使用传递的键作为最外层构建层次索引。如果为多索引,应该使用元组。
    # levels:序列列表,默认值无。用于构建MultiIndex的特定级别(唯一值)。否则,它们将从键推断。
    # names:list,default无。结果层次索引中的级别的名称。
    # verify_integrity:boolean,default False。检查新连接的轴是否包含重复项。这相对于实际的数据串联可能是非常昂贵的。
    # copy:boolean,default True。如果为False,请勿不必要地复制数据。
    
    #################################################################
    #################################################################
    import pandas as pd
    import numpy as np
    
    ############################
    # DataFrame的拼接
    ############################
    df1 = pd.DataFrame(
            {
                'A': ['A0', 'A1', 'A2', 'A3'],
                'B': ['B0', 'B1', 'B2', 'B3'],
                'C': ['C0', 'C1', 'C2', 'C3'],
                'D': ['D0', 'D1', 'D2', 'D3']
            },
            index=[0, 1, 2, 3])
    
    df2 = pd.DataFrame(
            {
                'A': ['A4', 'A5', 'A6', 'A7'],
                'B': ['B4', 'B5', 'B6', 'B7'],
                'C': ['C4', 'C5', 'C6', 'C7'],
                'D': ['D4', 'D5', 'D6', 'D7']
            },
            index=[4, 5, 6, 7])
    
    df3 = pd.DataFrame(
            {
                'A': ['A8', 'A9', 'A10', 'A11'],
                'B': ['B8', 'B9', 'B10', 'B11'],
                'C': ['C8', 'C9', 'C10', 'C11'],
                'D': ['D8', 'D9', 'D10', 'D11']
            },
            index=[8, 9, 10, 11])
    
    frames = [df1, df2, df3]
    result = pd.concat(frames)
    print(result)  # 图一
    
    ##################################################
    # 加入keys:序列,默认值无。使用传递的键作为最外层构建层次索引。如果为多索引,应该使用元组。
    ##################################################
    result = pd.concat(frames, keys=['x', 'y', 'z', 'w'])
    # result = pd.concat(frames, keys=['x', 'y'])  # 少df3
    # result = pd.concat(frames, keys=['x', 'y', 'z', 'w'])  # 无影响
    print(result)  # 图二
    
    ##################################################
    
    df4 = pd.DataFrame({'B': ['B2', 'B3', 'B6', 'B7'],
    'D': ['D2', 'D3', 'D6', 'D7'],
    'F': ['F2', 'F3', 'F6', 'F7']},
    index=[2, 3, 6, 7])
    
    result = pd.concat([df1, df4])
    print(result)  # 图三
    ##################################################
    # axis参数
    ##################################################
    result = pd.concat([df1, df4], axis=1)
    print(result)  # 图四
    ##################################################
    # join参数
    ##################################################
    result = pd.concat([df1, df4], join='inner')
    print(result)  # 图五
    
    ##################################################
    # ignore_index参数
    ##################################################
    result = pd.concat([df1, df4], join='inner', ignore_index=True)
    print(result)  # 图六
    

    merge(...)

  • 相关阅读:
    删除顺序表L中下标为p(0<=p<=length-1)的元素,成功返回1,不成功返回0,并将删除元素的值赋给e
    设顺序表中的数据元素递增有序,试着写一算法,将x插入到顺序表上的适当位置上,以保持该表的有序性。
    数据结构-顺序表基本操作的实现(含全部代码)【转】
    【转】结构体指针
    结构体(第十四章 )
    线性表
    第二章 c语言概述
    时间复杂度
    软件质量与测试 黑盒测试
    软件质量保证与测试 基本内容
  • 原文地址:https://www.cnblogs.com/854594834-YT/p/14204489.html
Copyright © 2011-2022 走看看