Pandas 最全的使用方式(下)

大家好,作为一名互联网行业的小白,写博客只是为了巩固自己学习的知识,但由于水平有限,博客中难免会有一些错误出现,有不妥之处恳请各位大佬指点一二!
博客主页:链接: https://blog.csdn.net/weixin_52720197?spm=1018.2118.3001.5343

7 整体数据管理

7.1 数据拆分

7.1.1 数据分组

df.groupby(
by :用于分组的变量名/函数
level = None :相应的轴存在多重索引时,指定用于分组的级别
as_index = True :在结果中将组标签作为索引
sort = True :结果是否按照分组关键字逬行排序
)#生成的是分组索引标记,而不是新的 df

单个数据分组

# 数据分组
dfg = df.groupby('开设')
dfg
# 查看dfg里面的数据
dfg.groups
# 查看具体描述
dfg.describe()

多个数据分组

dfg2 = df.groupby(['性别','开设'])
dfg2.describe()

在这里插入图片描述

7.1.2 基于拆分进行筛选

筛选出其中一组

dfgroup.get_group()
# 查看均值
dfg.get_group (‘课程').mean ()

筛选出所需的列
该操作也适用于希望对不同的变量列进行不同操作时

dfg[‘身高'].max()

7.2 分组汇总

在使用 groupby 完成数据分组后,就可以按照需求进行分组信息汇总,此时可以使用其它专门的汇总命令,如 agg 来完成汇总操作

7.2.1 使用 agg 函数进行汇总

df.aggregate( )

名称可以直接简写为 agg
可以用 axis 指定汇总维度
可以直接使用的汇总函数
在这里插入图片描述在这里插入图片描述

# 引入非内置函数
import numpy as np
df2 .身高. agg (np. sum)
df2g.身高. agg (np. sum)

引用自定义函数

def mymean(x):
	return x.mean()
df2 .身高.agg (mymean)
df2g.agg(mymean)

7.2.2 其他分组汇总方法

在生成交叉表的同时对单元格指定具体的汇总指标和汇总函数

df.pivot_table()
pd.crosstab()
pd.crosstab (df .性别,df.身高)

7.3 长宽格式转换

基于多重索引,Pandas 可以很容易地完成长型、宽型数据格式的相互转换。

7.3.1 转换为最简格式

df.stack(
level = -1 :需要处理的索引级别,默认为全部,int/string/list
dropna = True :是否删除为缺失值的行
)#转换后的结果可能为 Series

7.3.2 长宽型格式的自由互转

df.unstack(
level = -1 :需要处理的索引级别,默认为全部,int/string/list
fill_value :用于填充缺失值的数值
)
# 行列互相转换
数据转置: df.T

7.4 多个数据源的合并

7.4.1 数据的纵向合并

df.append(
other :希望添加的 DF/Series/字典/上述对象的列表 使用列表方式,就可以实现一次合并多个新对象
ignore_index = False :添加时是否忽略索引
verify_integrity = False :是否检查索引值的唯一性,有重复时报错
)
df = df.append( [df2, df3, df4])

7.4.2 数据的横向合并

merge 命令使用像 SQL 的连接方式

pd.merge(
需要合并的 DF
left :需要合并的左侧 DF
right :需要合并的右侧 DF
how = ' inner':具体的连接类型
{
   left、right 、outer 、 inner、)
两个 DF 的连接方式
on :用于连接两个 DF 的关键变量(多个时为列表),必须在两侧都出现
left_on :左侧 DF 用于连接的关键变量(多个时为列表)
right_on :右侧 DF 用于连接的关键变量(多个时为列表)
left_index = False :是否将左侧 DF 的索引用于连接
right_index = False :是否将右侧 DF 的索引用于连接
其他附加设定
sort = False :是否在合并前按照关键变量排序(会影响合并后的案例顺序)
suffixes :重名变量的处理方式,提供长度为 2 的列表元素,分别作为后缀
suffixes=(‘_x' 、‘_y')
copy = True
indicator = False :在结果 DF 中增加'_merge ',用于记录数据来源 也可以直接提
供相应的变量列名
Categorical 类型,取值: left_only 、 right_only 、both
validate = None :核查合并类型是否为所指定的情况
one_to_one or 1:1
one_to_many or 1:m
many_to_one or m:1
many_to_many or m:m

7.4.3 Concat 命令简介

同时支持横向合并与纵向合并

pd.concat(
objs :需要合并的对象,列表形式提供
axis = 0 :对行还是对列方向逬行合并
(0 index 、 1 columns )
join = outer :对另一个轴向的索引值如何逬行处理
(inner 、outer )
ignore_index = False
keys = None :为不同数据源的提供合并后的索引值
verify_integrity = False
copy = True
)

纵向合并

df1 = pd.read_excel("stu_data.xlsx", sheet_name = ‘new1' )
df2 = pd.read_excel("stu_data.xlsx", sheet_name = ‘new2' )
pd.concat([df1,df2])
pd.concat([df1,df2], key=[‘a','b']

横向合并

df1 = pd.read_excel("stu_data.xlsx", sheet_name = ‘new4' )
df2 = pd.read_excel("stu_data.xlsx", sheet_name = ‘new5' )
pd.concat([df1,df2 ], axis = 1

8.1 处理缺失值

8.1.1 系统默认的缺失值

系统默认的缺失值
None 和 np. nan
确定数值是否是缺失值
df. isna () # 别名为 isnull, 反函数为 notna

None 和 np.nan 的区别:能否进行比较
None == None
np.nan == np.nan
设定 in 和 inf 是否被认定为缺失值

# 查看是无穷大与无穷小是否为缺失值
pandas.options.mode.use_inf_as_na

8.1.2 处理自定义缺失值

目前 Pandas 不支持设定自定义缺失值,因此只能考虑将其替换为系统缺失值

df.replace('自定义值',np.nan)
df .开设.replace ("不清楚",np.nan)

设定为 None 后的效果完全不同

df .开设,replace ("不清楚",None)
df2 = df .replace ( [“不清楚”,171] ,[np.nan, np.nan] ) # 后面的中括号可以简写 np.nan

8.1.3 标识缺失值

df.isna(): 检查相应的数据是否为缺失值 同 df.isnull()
df2 = df .replace ( [“不清楚”,171] ,np.nan )
检查多个单元格的取值是否为指定数值

df.any(
axis : index (0), columns (1)
skipna = True :检查时是否忽略缺失值
level = None :多重索引时指定具体的级别
df.all(
axis : index 
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值