美文网首页
常见操作

常见操作

作者: 微笑life | 来源:发表于2019-12-27 09:22 被阅读0次

    1 删除列

    1.1 用对象的drop方法

    # 注:必须指定axis参数=1,可以用labels或者columns或者都不用。
    df = pd.DataFrame(np.random.randn(6,4), columns=list("ABCD"))
    # method1 和method2 和method3和method4 和method5 和method6的写法效果一致。
    df.drop(["A"], axis = 1)                  #method1
    df.drop(labels=["A"], axis = 1)           #method2
    df.drop(labels="A", axis = 1)             #method3
    df.drop(columns="A")                      #method4
    df.drop(columns=["A"])                    #method5
    df.drop(columns=["A"], axis = 1)          #method6
    # 注:如果用labels,必须指定axis=1(删除列),如果用columns,则不必指定axis=1,因为columns时,axis为1
    # 如果删除多列,就只能用method1和method2
    df.drop(["A", "B"], axis = 1)                  #method1
    df.drop(labels=["A", "B"], axis = 1)           #method2
    # 如果指定的列不存在,则报错  KeyError: "['具体指定列'] not found in axis"
    # 如果就地修改,可以指定inplace=True
    
    创建数据
    image.png
    删除多列
    inplace=True,默认为False

    1.2 用python内建的del

    # 会就地修改原数据且一次只能删除一列
    del df["A"]  
    
    image.png

    2 增加列

    2.1 通过位置([] or loc)<原地修改>

    df = pd.DataFrame(np.random.randn(6,4), columns=list("ABCD"))        
    df["E"] = 1.0                                                        
    df.loc[:,"F"] = np.nan                                               
    df                                                                   
    
    image.png

    2.2 通过对象的insert方法 <原地修改>

    第一参数的值的范围为:[0,df.shape[1]],包括列的最大索引+1

    # 在第一列添加名为“E”的一列,且其值可以为:全是0或None或np.nan的值,或是list-like,或是某些列的运算结果
    df = pd.DataFrame(np.random.randn(6,4), columns=list("ABCD"))
    df.insert(0,"E",0)                  #值全为0
    df = pd.DataFrame(np.random.randn(6,4), columns=list("ABCD"))         
    df.insert(0,"E",None)               #值全为None                                    
    df = pd.DataFrame(np.random.randn(6,4), columns=list("ABCD"))  
    df.insert(0,"E",np.nan)             #值全为NaN     
    df = pd.DataFrame(np.random.randn(6,4), columns=list("ABCD")) 
    df.insert(0,"E",df.A + df.B)        #值为A和B列的和     
    df = pd.DataFrame(np.random.randn(6,4), columns=list("ABCD"))
    df.insert(0,"E",df["A"] + df["B"])  #值为A列和B列的和 
    #第一参数的值的范围为:[0,df.shape[1]],包括列的最大索引+1
    df = pd.DataFrame(np.random.randn(6,4), columns=list("ABCD"))   
    df.insert(4,"E",df["A"] + df["B"])     
    #          A         B         C         D         E
    #0 -2.162230  1.405092 -0.467515 -0.795393 -0.757138
    #1  0.400447  0.397316  0.094859 -0.320334  0.797763
    #2  1.113476  0.841143 -1.825015  1.086205  1.954619
    #3 -1.152093 -0.948018 -0.232126 -0.814098 -2.100112
    #4  0.452588 -1.228917 -0.795181 -0.723586 -0.776329
    #5  0.153220  1.956513 -0.387545 -0.525249  2.109733
    

    2.3 pd.concat <不会原地修改>

    #推荐用axis=1
    pd.concat([df, pd.DataFrame(columns = list("DFE"))], sort =False)                  # method1
    pd.concat([df, pd.DataFrame(columns = list("DFE"))], axis = 0, sort =False)        # mehod2
    # method1 and method2 结果一致,如果sort=True,则对列名进行排序,变成ABCDEF
    # 如果添加的列,已经存在,则不再重复添加(axis=0)。
              A         B         C         D    F    E
    0 -0.162737  0.102415  0.516459  0.505589  NaN  NaN
    1  1.064120  0.744812  1.760359 -0.604785  NaN  NaN
    2  1.786787 -1.123441 -2.451674  1.125258  NaN  NaN
    3 -1.637454 -0.193606  2.038299 -0.116104  NaN  NaN
    4  0.090663  0.793978  1.206064 -1.026067  NaN  NaN
    5  0.908653 -1.931487 -1.068116  2.164030  NaN  NaN
    pd.concat([df, pd.DataFrame(columns = list("DFE"))], axis = 1, sort =False)
    #如果添加的列,已经存在,则会再重复添加(axis=1)
              A         B         C         D    D    F    E
    0 -0.162737  0.102415  0.516459  0.505589  NaN  NaN  NaN
    1  1.064120  0.744812  1.760359 -0.604785  NaN  NaN  NaN
    2  1.786787 -1.123441 -2.451674  1.125258  NaN  NaN  NaN
    3 -1.637454 -0.193606  2.038299 -0.116104  NaN  NaN  NaN
    4  0.090663  0.793978  1.206064 -1.026067  NaN  NaN  NaN
    5  0.908653 -1.931487 -1.068116  2.164030  NaN  NaN  NaN
    

    2.4 对象的reindex方法<不会原地修改,如原地修改,需设置inplace=True>

    df = pd.DataFrame(np.random.randn(6,4), columns=list("ABCD"))
    df.reindex(columns = list("ABCDEFG"))          #method1
    df.reindex(labels = list("ABCDEFG"), axis = 1) #method2
    #method1 and method2结果一致
    #修改默认添加值:fill_value参数
    df.reindex(labels = list("ABCDEFG"), axis = 1, fill_value=21)
              A         B         C         D   E   F   G
    0  0.946368  1.168997  2.511798  0.661356  21  21  21
    1 -0.666867 -0.110801 -0.455017 -0.417373  21  21  21
    2  0.566638 -1.092429  1.136306  0.092472  21  21  21
    3  0.605805 -0.697731 -0.001785 -0.916009  21  21  21
    4 -0.715701  0.752973  0.006688 -0.948602  21  21  21
    5 -0.818942  2.388051  0.679956  1.035658  21  21  21
    # 修改列的顺序
    df.reindex(labels = list("AEFGBCD"), axis = 1, fill_value=None)
              A   E   F   G         B         C         D
    0  0.946368 NaN NaN NaN  1.168997  2.511798  0.661356
    1 -0.666867 NaN NaN NaN -0.110801 -0.455017 -0.417373
    2  0.566638 NaN NaN NaN -1.092429  1.136306  0.092472
    3  0.605805 NaN NaN NaN -0.697731 -0.001785 -0.916009
    4 -0.715701 NaN NaN NaN  0.752973  0.006688 -0.948602
    5 -0.818942 NaN NaN NaN  2.388051  0.679956  1.035658
    

    3增加行

    3.1 通过位置增加(loc and at)<原地修改>

    # 添加的值的形状(长度)和df对象的列的长度一致。
    df = pd.DataFrame(np.random.randn(6,4), columns=list("ABCD"))
    df.loc["5"] = [1,2,3,4]  # 索引"5"在df对象中不存在
    df.loc[5] = [1,2,3,3]    # 索引5在对象df中存在
    
    

    相关文章

      网友评论

          本文标题:常见操作

          本文链接:https://www.haomeiwen.com/subject/qkmkoctx.html