导入包:

import pandas as pd

from pandas import DataFrame,Series

注意:下文没有对这几个函数的inplace值进行设置,如果设置成inplace = True,删空、去重和排序都会在源数据上生效,建议操作后的源数据赋值给新的变量。




python中 三行合成一行 python多行合并为一行_python中 三行合成一行


数据源

python中 三行合成一行 python多行合并为一行_数据_02

读取数据源


数据源有5个sheet,默认读取第一个sheet,如果想读取,可以指定读取某个sheet使用sheet_name="sheet名称"


python中 三行合成一行 python多行合并为一行_缺失值_03

读取数学成绩

同理其他读取其他sheet,这样的方法只能每次读取一个sheet


python中 三行合成一行 python多行合并为一行_数据_04

读取政治成绩

如果想合并,那么就用到以下函数:

1、增加

1)concat

主要做纵向合并


python中 三行合成一行 python多行合并为一行_数据_05

截屏部分数据

这里传入了keys,标识出合并的表格来源。

2)merge

横向合并两个DataFrame表:

如数学成绩和历史成绩


python中 三行合成一行 python多行合并为一行_缺失值_06

数学成绩

python中 三行合成一行 python多行合并为一行_数据_07

历史成绩

python中 三行合成一行 python多行合并为一行_数据_08


只有4个人的成绩,取的并集。

how是指定连接方式,这里用的inner,表示我们基于姓名索引来匹配,只返回两个表中共同(同时出现)姓名的数据。下面详解一下inner还涉及到的其他参数——left,right,outer


python中 三行合成一行 python多行合并为一行_数据_09

左连接,按照有数学成绩的人,列出其历史成绩

表中没有绵绵和曲曲的历史成绩


python中 三行合成一行 python多行合并为一行_字段_10

右连接,按照有历史成绩的人,列出其数学成绩

python中 三行合成一行 python多行合并为一行_缺失值_11

并集,列出所有有数学成绩和历史成绩

连接后的数据,分别保留了数学和历史成绩表的所有列名称,那么如何合并姓名和性别呢,使用lefton,right_on

left_on=["name","sex"],right_on=["name","sex"]


python中 三行合成一行 python多行合并为一行_缺失值_12


以上可以看出主索引是 0,1,2……5,主索引修改为name,使用set_index


python中 三行合成一行 python多行合并为一行_字段_13


这里看不出哪个成绩,对列重命名

方法一:使用rename,传入字典


python中 三行合成一行 python多行合并为一行_数据_14

rename

方法二:传入列表


python中 三行合成一行 python多行合并为一行_python中 三行合成一行_15


2、删除

为了做删除和去重,对math表做修改,加了3行缺失值,以及妮妮,静静和绵绵的重复


python中 三行合成一行 python多行合并为一行_python中 三行合成一行_16

对math表做修改

1)删除空元素行

dropna函数默认删除所有出现空值的行,即只要一行中任意一个字段为空,就会被删除。


python中 三行合成一行 python多行合并为一行_字段_17


可以看出以及剔除缺失值的行。

如果想去掉成绩为空的行,可以设置subset参数,例如dropna(subset = ['sex']),来指定当一行中的scores字段为空时,才会被删除。正确结果:去掉仔仔和绵绵


python中 三行合成一行 python多行合并为一行_python中 三行合成一行_18

删掉成绩为空的行

2)去重

drop_duplicates()默认是删除两行完全一样的,


python中 三行合成一行 python多行合并为一行_同一列两行数据怎么合并成一行_19


静静和绵绵的成绩不一样,所以未删掉。

如果指定删除某一列重复项,用subset

例如:data_math.drop_duplicates(subset="name")


python中 三行合成一行 python多行合并为一行_同一列两行数据怎么合并成一行_20

删除姓名重复的成绩

此时如果遇到重复值默认保留第一行,删除的是后面出现的

如果想保留最后出现的,则使用keep,即keep="last",

data_math.drop_duplicates(subset="name",keep="last"),如下图


python中 三行合成一行 python多行合并为一行_缺失值_21


3、查

条件筛选loc

在行参数设置好同时满足成绩大于80和姓名等于“女性”这两个条件即可。


python中 三行合成一行 python多行合并为一行_缺失值_22


注意:

等号是==,

以及条件之间用“&”连接,

两个条件分别用()括起来,

因为是对行有限制,因此在逗号前限制条件,对列无限制,因此用“:”

观察数据首先要排序,用到函数sort_values,默认是升序,ascending=True,,缺失值显示在最后


python中 三行合成一行 python多行合并为一行_数据_23


ascending=False,降序


python中 三行合成一行 python多行合并为一行_同一列两行数据怎么合并成一行_24

对成绩降序

4、分

groupby分组和cut切分

1)groupby是分组函数

最主要的参数是列参数,即按照哪一列或者哪几列(多列要用列表外括)进行汇总,这里是按照sex:


python中 三行合成一行 python多行合并为一行_python中 三行合成一行_25


要进一步得到数据,需要在分组的时候对相关字段进行计算(常用的计算方法包括sum、max、min、mean、std)


python中 三行合成一行 python多行合并为一行_同一列两行数据怎么合并成一行_26


注意:计数是去掉了对应列对应行的缺失值

对指定列scores计数:


python中 三行合成一行 python多行合并为一行_字段_27


注意:sex作为汇总的依据列,默认转化为索引列,如果我们不希望它变成索引,向groupby内传入参数as_index = False即可,如下图


python中 三行合成一行 python多行合并为一行_python中 三行合成一行_28


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"]


python中 三行合成一行 python多行合并为一行_同一列两行数据怎么合并成一行_29

1 去重

python中 三行合成一行 python多行合并为一行_python中 三行合成一行_30

2 去空

python中 三行合成一行 python多行合并为一行_同一列两行数据怎么合并成一行_31

3 排序

python中 三行合成一行 python多行合并为一行_字段_32

4 重新设置索引

python中 三行合成一行 python多行合并为一行_字段_33

打完标签的结果

注意:对缺失值无法打标签,

主索引是无法去重复的

新增的标签加在原DataFrame里面的方法,data00["等级"]