pandas常用操作复习-04-删除行列
- 前情提要
- 数据准备
- 实际操作
- 导入模块
- 指定文件
- 读取文件并查看
- 创建副本以供操作
- 删除
- 利用pop
- 利用drop
- 删除列:
- 删除行
- 利用dropna()
- 致谢链接
前情提要
??在上一节的移动列的位置一节中,我们使用了一种常用的方法:首先利用一个中间变量,将要更动位置的列赋值给它,再使用pandas中的insert()将这个中间变量插入到合适的位置。
??我们用到了pop(),所谓pop,就是弹出的意思。将一个列弹出,那么原数据中当然也就没有这个列的内容了。因此pop()也可以说是删除。而且是原地删除。
??因此特意腾出一节来说明pandas中的删除操作。
数据准备
??因为是专门介绍删除操作,所以我们额外补充了一点数据。
学号 | 姓名 | 班级 | 语文 | 数学 | 英语 | 音乐 | 美术 | 体育 | 等级 | |
---|---|---|---|---|---|---|---|---|---|---|
0 | A01 | 饶秀颖 | 1班 | 35.0 | 45.0 | 55.0 | 95.0 | 95.0 | 95.0 | A |
1 | A02 | 于俊远 | 1班 | 38.0 | 53.0 | 46.0 | 97.0 | 98.0 | 95.0 | A |
2 | A03 | 王五 | 1班 | 54.0 | 46.0 | 38.0 | 97.0 | 99.0 | 97.0 | A |
3 | A08 | 冉颇 | 3班 | 34.0 | 54.0 | 60.0 | 96.0 | 98.0 | 99.0 | A |
4 | A09 | 夫余岚裳 | 3班 | 43.0 | 57.0 | 67.0 | 98.0 | 95.0 | 94.0 | A |
5 | A10 | 薛菁 | 3班 | 55.0 | 60.0 | 65.0 | 96.0 | 93.0 | 96.0 | A |
6 | A11 | 印采绿 | NaN | 12.0 | 10.0 | 7.0 | 90.0 | 90.0 | 90.0 | A |
??如果仔细观察,会发现多了一行一列:一行是一个班级位置为NaN的学生,一列是全部为A的等级列。
-
现在因为双减,很多地方不算排名,只给予等级,学校的老师为了安家长的心给的都是等级A,何老师可看不惯这种,现在他要做的就是将这一列等级列删除。
-
此外多出的一行,原来是明年要转走的学生,现在他也要将之删除掉。
实际操作
导入模块
import pandas as pd
import pathlib
指定文件
file_path = pathlib.Path("/content/drive/MyDrive/Notebooks_data/delete.xlsx")
file_path
out
PosixPath('/content/drive/MyDrive/Notebooks_data/delete.xlsx')
读取文件并查看
data_source = pd.read_excel(file_path)
data_source
out
学号 姓名 班级 语文 数学 英语 音乐 美术 体育 等级 0 A01 饶秀颖 1班 35.0 45.0 55.0 95.0 95.0 95.0 A 1 A02 于俊远 1班 38.0 53.0 46.0 97.0 98.0 95.0 A 2 A03 王五 1班 54.0 46.0 38.0 97.0 99.0 97.0 A 3 A08 冉颇 3班 34.0 54.0 60.0 96.0 98.0 99.0 A 4 A09 夫余岚裳 3班 43.0 57.0 67.0 98.0 95.0 94.0 A 5 A10 薛菁 3班 55.0 60.0 65.0 96.0 93.0 96.0 A 6 A11 印采绿 NaN 12.0 10.0 7.0 90.0 90.0 90.0 A
创建副本以供操作
# .copy(deep=True)是深度拷贝。这样针对任意一个data的操作,都不会影响到其他的data
data1 = data_source.copy(deep=True)
data2 = data_source.copy(deep=True)
data3 = data_source.copy(deep=True)
data4 = data_source.copy(deep=True)
删除
利用pop
# 利用pop语法可以原地删除数据,操作以后原始数据的内容直接被更改
# 但是需要注意的是:pop只能处理列的删除问题
data1.pop("等级")
data1
out
学号 姓名 班级 语文 数学 英语 音乐 美术 体育 0 A01 饶秀颖 1班 35.0 45.0 55.0 95.0 95.0 95.0 1 A02 于俊远 1班 38.0 53.0 46.0 97.0 98.0 95.0 2 A03 王五 1班 54.0 46.0 38.0 97.0 99.0 97.0 3 A08 冉颇 3班 34.0 54.0 60.0 96.0 98.0 99.0 4 A09 夫余岚裳 3班 43.0 57.0 67.0 98.0 95.0 94.0 5 A10 薛菁 3班 55.0 60.0 65.0 96.0 93.0 96.0 6 A11 印采绿 NaN 12.0 10.0 7.0 90.0 90.0 90.0
利用drop
drop()的删除操作多样,可以删除行也可以删除列。drop()是流行的对pandas DataFrame进行删除的操作。
但需要注意的是,drop如果没有指定inplace=True, 那么就不是原地进行删除操作
删除列:
# 法一:利用.drop(columns="列名")
# 倘若要一次性删除多个列,则可以使用列表:.drop(columns=["列1", "列2"])
data2.drop(columns="等级")
# 法二:利用.drop(labels="列名", axis=1)
# 同样的,倘若要一次性删除多个列,则可以使用列表:.drop(labels=["列1", "列2"], axis=1)
data2.drop(labels="等级", axis=1)
上述两种代码都可以得到相同的结果
学号 姓名 班级 语文 数学 英语 音乐 美术 体育 0 A01 饶秀颖 1班 35.0 45.0 55.0 95.0 95.0 95.0 1 A02 于俊远 1班 38.0 53.0 46.0 97.0 98.0 95.0 2 A03 王五 1班 54.0 46.0 38.0 97.0 99.0 97.0 3 A08 冉颇 3班 34.0 54.0 60.0 96.0 98.0 99.0 4 A09 夫余岚裳 3班 43.0 57.0 67.0 98.0 95.0 94.0 5 A10 薛菁 3班 55.0 60.0 65.0 96.0 93.0 96.0 6 A11 印采绿 NaN 12.0 10.0 7.0 90.0 90.0 90.0
删除行
不同于删除列的时候有列名,一般不会自定义行标签。
因此删除行其实可以分成两类。
一个是按照顺序的索引来删除。但是这往往只适合少量已知位置的数据。
二是判定条件,如果符合条件就删除所在的一行。
判定条件我们常使用dropna()
# 法一:利用.drop(index=行号)
data3.drop(index=6)
# 法二:利用.drop(index=行标签, axis=0)
# 但是因为一般并不人为规定行标签,故而同index一样,这里也使用的行号
data3.drop(labels=6,axis=0)
out
学号 姓名 班级 语文 数学 英语 音乐 美术 体育 等级 0 A01 饶秀颖 1班 35.0 45.0 55.0 95.0 95.0 95.0 A 1 A02 于俊远 1班 38.0 53.0 46.0 97.0 98.0 95.0 A 2 A03 王五 1班 54.0 46.0 38.0 97.0 99.0 97.0 A 3 A08 冉颇 3班 34.0 54.0 60.0 96.0 98.0 99.0 A 4 A09 夫余岚裳 3班 43.0 57.0 67.0 98.0 95.0 94.0 A 5 A10 薛菁 3班 55.0 60.0 65.0 96.0 93.0 96.0 A
利用dropna()
我们观察数据发现,我们要删除的那一行是有一个显眼的条件的:其班级位置出为空值,显示在pandas中就是NaN。
我们利用dropna()方法,指定删除行axis=0,指定只要有空值就删除how="any", 然后指定在哪些列中进行搜索subset=[]列表内可以是多个columns
data4.dropna(axis=0, how="any", subset=["班级"])
out
学号 姓名 班级 语文 数学 英语 音乐 美术 体育 等级 0 A01 饶秀颖 1班 35.0 45.0 55.0 95.0 95.0 95.0 A 1 A02 于俊远 1班 38.0 53.0 46.0 97.0 98.0 95.0 A 2 A03 王五 1班 54.0 46.0 38.0 97.0 99.0 97.0 A 3 A08 冉颇 3班 34.0 54.0 60.0 96.0 98.0 99.0 A 4 A09 夫余岚裳 3班 43.0 57.0 67.0 98.0 95.0 94.0 A 5 A10 薛菁 3班 55.0 60.0 65.0 96.0 93.0 96.0 A
致谢链接
DataFrame的copy的用法_dataframe 复制
Python Pandas Dataframe.pop()用法及代码示例
*Pandas: Drop函数(Dataframe删除指定行列)
*pandas检查是否有空值以及处理空值