导入包:
import pandas as pd
from pandas import DataFrame,Series
注意:下文没有对这几个函数的inplace值进行设置,如果设置成inplace = True,删空、去重和排序都会在源数据上生效,建议操作后的源数据赋值给新的变量。
数据源
读取数据源
数据源有5个sheet,默认读取第一个sheet,如果想读取,可以指定读取某个sheet使用sheet_name="sheet名称"
读取数学成绩
同理其他读取其他sheet,这样的方法只能每次读取一个sheet
读取政治成绩
如果想合并,那么就用到以下函数:
1、增加
1)concat
主要做纵向合并
截屏部分数据
这里传入了keys,标识出合并的表格来源。
2)merge
横向合并两个DataFrame表:
如数学成绩和历史成绩
数学成绩
历史成绩
只有4个人的成绩,取的并集。
how是指定连接方式,这里用的inner,表示我们基于姓名索引来匹配,只返回两个表中共同(同时出现)姓名的数据。下面详解一下inner还涉及到的其他参数——left,right,outer
左连接,按照有数学成绩的人,列出其历史成绩
表中没有绵绵和曲曲的历史成绩
右连接,按照有历史成绩的人,列出其数学成绩
并集,列出所有有数学成绩和历史成绩
连接后的数据,分别保留了数学和历史成绩表的所有列名称,那么如何合并姓名和性别呢,使用lefton,right_on
left_on=["name","sex"],right_on=["name","sex"]
以上可以看出主索引是 0,1,2……5,主索引修改为name,使用set_index
这里看不出哪个成绩,对列重命名
方法一:使用rename,传入字典
rename
方法二:传入列表
2、删除
为了做删除和去重,对math表做修改,加了3行缺失值,以及妮妮,静静和绵绵的重复
对math表做修改
1)删除空元素行
dropna函数默认删除所有出现空值的行,即只要一行中任意一个字段为空,就会被删除。
可以看出以及剔除缺失值的行。
如果想去掉成绩为空的行,可以设置subset参数,例如dropna(subset = ['sex']),来指定当一行中的scores字段为空时,才会被删除。正确结果:去掉仔仔和绵绵
删掉成绩为空的行
2)去重
drop_duplicates()默认是删除两行完全一样的,
静静和绵绵的成绩不一样,所以未删掉。
如果指定删除某一列重复项,用subset
例如:data_math.drop_duplicates(subset="name")
删除姓名重复的成绩
此时如果遇到重复值默认保留第一行,删除的是后面出现的
如果想保留最后出现的,则使用keep,即keep="last",
data_math.drop_duplicates(subset="name",keep="last"),如下图
3、查
条件筛选loc
在行参数设置好同时满足成绩大于80和姓名等于“女性”这两个条件即可。
注意:
等号是==,
以及条件之间用“&”连接,
两个条件分别用()括起来,
因为是对行有限制,因此在逗号前限制条件,对列无限制,因此用“:”
观察数据首先要排序,用到函数sort_values,默认是升序,ascending=True,,缺失值显示在最后
ascending=False,降序
对成绩降序
4、分
groupby分组和cut切分
1)groupby是分组函数
最主要的参数是列参数,即按照哪一列或者哪几列(多列要用列表外括)进行汇总,这里是按照sex:
要进一步得到数据,需要在分组的时候对相关字段进行计算(常用的计算方法包括sum、max、min、mean、std)
注意:计数是去掉了对应列对应行的缺失值
对指定列scores计数:
注意:sex作为汇总的依据列,默认转化为索引列,如果我们不希望它变成索引,向groupby内传入参数as_index = False即可,如下图
data_math.groupby("sex",as_index = False)["scores"].count()
2)切分(分桶)
用来把一组数据分割成离散的区间
操作常用于一维数组的分类和打标,cut函数能够高效的完成任务。它的主要参数和用法如下:pd.cut("数组/列表/dataframe的一列",bins="切分方式",right=True/False,labels="打标签")
bins=[0,60,80,90,100]
right=True,表示区间左开右闭,相反则是左闭右开(0,60],[0,60)
labels=["D,"C","B","A"]
1 去重
2 去空
3 排序
4 重新设置索引
打完标签的结果
注意:对缺失值无法打标签,
主索引是无法去重复的
新增的标签加在原DataFrame里面的方法,data00["等级"]