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中存在
网友评论