Python数据分析从入门到精通
上QQ阅读APP看书,第一时间看更新

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的行

说明

以上代码中的方法都可以实现删除指定的行、列数据,读者选择一种即可。