
3.6 数据的增加、修改和删除
本节主要介绍如何操纵DataFrame对象中的各种数据。例如,数据的增加、修改和删除。
3.6.1 增加数据
DataFrame对象增加数据主要包括列数据增加和行数据增加。首先看一下原始数据,如图3.35所示。

图3.35 原始数据
1.按列增加数据
按列增加数据,可以通过以下3种方式实现。
(1)直接为DataFrame对象赋值
【示例26】 增加一列“物理”成绩。(示例位置:资源包\MR\Code\03\26)
增加一列“物理”成绩,程序代码如下:

运行程序,输出结果如图3.36所示。

图3.36 按列增加数据
(2)使用loc属性在DataFrame对象的最后增加一列
【示例27】 使用loc属性增加一列“物理”成绩。(示例位置:资源包\MR\Code\03\27)
使用loc属性在DataFrame对象的最后增加一列。例如,增加“物理”一列,主要代码如下:
df.loc[:,'物理'] = [88,79,60,50]
在DataFrame对象最后增加一列“物理”,其值为等号右边数据。
(3)在指定位置插入一列
在指定位置插入一列,主要使用insert()方法。
【示例28】 在第1列后面插入“物理”成绩。(示例位置:资源包\MR\Code\03\28)
例如,在第1列后面插入“物理”,其值为wl的数值,主要代码如下:
01 wl =[88,79,60,50] 02 df.insert(1,'物理',wl)
运行程序,输出结果如图3.37所示。

图3.37 使用insert()方法增加一列
2.按行增加数据
按行增加数据,可以通过以下两种方式实现。
(1)增加一行数据
增加一行数据主要使用loc属性实现。
【示例29】 在成绩表中增加一行数据。(示例位置:资源包\MR\Code\03\29)
在成绩表中增加一行数据,即“钱多多”同学的成绩,主要代码如下:
df.loc['钱多多'] = [100,120,99]
(2)增加多行数据
增加多行数据主要使用字典结合append()方法实现。
【示例30】 在原有数据中增加几名同学的考试成绩。(示例位置:资源包\MR\Code\03\30)
在原有数据中增加“钱多多”“童年”“无名”同学的考试成绩,主要代码如下:
01 df_insert=pd.DataFrame({'语文':[100,123,138],'数学':[99,142,60],'英语':[98,139,99]},index = ['钱多多','童年','无名']) 02 df1 = df.append(df_insert)
运行程序,输出结果分别如图3.38和图3.39所示。

图3.38 增加一行数据

图3.39 增加多行数据
3.6.2 修改数据
修改数据包括行、列标题和数据的修改,首先看一下原始数据,如图3.40所示。

图3.40 原始数据
1.修改列标题
修改列标题主要使用DataFrame对象的cloumns属性,直接赋值即可。
【示例31】 修改“数学”的列名。(示例位置:资源包\MR\Code\03\31)
将“数学”修改为“数学(上)”,主要代码如下:
df.columns=['语文','数学(上)','英语']
上述代码中,即使只修改“数学”为“数学(上)”,但是也要将所有列的标题全部写上;否则将报错。
下面再介绍一种方法,使用DataFrame对象的rename()方法修改列标题。
【示例32】 修改多个学科的列名。(示例位置:资源包\MR\Code\03\32)
将“语文”修改为“语文(上)”、“数学”修改为“数学(上)”、“英语”修改为“英语(上)”,主要代码如下:
df.rename(columns = {'语文':'语文(上)','数学':'数学(上)','英语':'英语(上)'},inplace = True)
上述代码中,参数inplace为True,表示直接修改df;否则,不修改df,只返回修改后的数据。
运行程序,输出结果分别如图3.41和图3.42所示。
2.修改行标题
修改行标题主要使用DataFrame对象的index属性,直接赋值即可。
【示例33】 将行标题统一修改为数字编号。(示例位置:资源包\MR\Code\03\33)
将行标题统一修改为数字编号,主要代码如下:
df.index=list('1234')

图3.41 修改列标题1

图3.42 修改列标题2
使用DataFrame对象的rename()方法也可以修改行标题。例如,将行标题统一修改为数字编号,主要代码如下:
df.rename({'明日':1,'七月流火':2,'高袁圆':3,'二月二':4},axis=0,inplace = True)
3.修改数据
修改数据主要使用DataFrame对象的loc属性和iloc属性。
【示例34】 修改学生成绩数据。(示例位置:资源包\MR\Code\03\34)
(1)修改整行数据
例如,修改“明日”同学的各科成绩,主要代码如下:
df.loc['明日']=[120,115,109]
如果各科成绩均加10分,可以直接在原有值上加10,主要代码如下:
df.loc['明日']=df.loc['明日']+10
(2)修改整列数据
例如,修改所有同学的“语文”成绩,主要代码如下:
df.loc[:,'语文']=[115,108,112,118]
(3)修改某一数据
例如,修改“明日”同学的“语文”成绩,主要代码如下:
df.loc['明日','语文']=115
(4)使用iloc属性修改数据
通过iloc属性指定行、列位置实现修改数据,主要代码如下:
01 df.iloc[0,0]=115 #修改某一数据 02 df.iloc[:,0]=[115,108,112,118] #修改整列数据 03 df.iloc[0,:]=[120,115,109] #修改整行数据
3.6.3 删除数据
删除数据主要使用DataFrame对象的drop()方法。语法如下:
DataFrame.drop(labels=None, axis=0, index=None, columns=None, level=None, inplace=False, errors='raise')
参数说明:
labels:表示行标签或列标签。
axis:axis = 0,表示按行删除;axis = 1,表示按列删除。默认值为0,即按行删除。
index:删除行,默认值为None。
columns:删除列,默认值为None。
level:针对有两级索引的数据。level = 0,表示按第1级索引删除整行;level = 1表示按第2级索引删除整行,默认值为None。
inplace:可选参数,对原数组做出修改并返回一个新数组。默认值为False,如果值为True,那么原数组直接就被替换。
errors:参数值为ignore或raise,默认值为raise,如果值为ignore(忽略),则取消错误。
1.删除行、列数据
【示例35】 删除学生成绩数据。(示例位置:资源包\MR\Code\03\35)
删除指定的学生成绩数据,主要代码如下:

2.删除特定条件的行
删除满足特定条件的行,首先找到满足该条件的行索引,然后再使用drop()方法将其删除。
【示例36】 删除符合条件的学生成绩数据。(示例位置:资源包\MR\Code\03\36)
删除“数学”成绩中包含88的行、“语文”成绩中小于110的行,主要代码如下:
01 df.drop(index=df[df['数学'].isin([88])].index[0],inplace=True) #删除“数学”成绩中包含88的行 02 df.drop(index=df[df['语文']<110].index[0],inplace=True) #删除“语文”成绩中小于110的行
说明
以上代码中的方法都可以实现删除指定的行、列数据,读者选择一种即可。