pandas学习笔记(四):数据操作

本文深入探讨了Pandas库中的数据操作,包括如何对DataFrame进行排序,处理缺失值,以及进行多列排序。此外,还详细介绍了数据替换方法,如一对一、多对一替换,以及处理缺失值。文章进一步讲解了如何利用groupby进行数据分组,展示不同统计结果,并使用pivot_table创建数据透视表。最后,涉及数据的排名功能,包括单列排名和组内排名。这些操作对于数据分析和处理至关重要。
摘要由CSDN通过智能技术生成

测试数据如下:

import numpy as np

data = {'animal': ['cat', 'cat', 'snake', 'dog', 'dog', 'cat', 'snake', 'cat', 'dog', 'dog'],
        'age': [2.5, 3, 0.5, np.nan, 5, 2, 4.5, np.nan, 7, 3],
        'visits': [1, 3, 2, 3, 2, 3, 1, 1, 2, 1],
        'priority': ['yes', 'yes', 'no', 'yes', 'no', 'no', 'no', 'yes', 'no', 'no']}

labels = ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j']
df = pd.DataFrame(data, index=labels)

排序

sort_values()
df.sort_values(by, axis=0, ascending=True, inplace=False, kind=‘quicksort’, na_position=‘last’)
by:排序列
ascending:True升序,False降序,默认升序
na_position:默认值为last,表示将缺失值显示在最后
(1)按单列数值排序

#按照年龄升序
df.sort_values(by=["age"],ascending=True)

(2)有缺失值的列排序

#按照年龄升序,缺失值在最前面
df.sort_values(by=["age"],ascending=True,na_position="first")

(3)按多列数据排序

#按照年龄降序,游客数升序排列
df.sort_values(by=["age","visits"],ascending=[False,True])

替换

replace()
df.replace(to_replace=None, value=None, inplace=False, limit=None, regex=False, method=‘pad’, axis=None)
(1)一对一替换

#将animal列中的cat换为duck
df["animal"]=df["animal"].replace("cat",“duck”)

(2)多对一替换

#将priority列中的yes和no换为True
df["priority"]=df["priority"].replace(["yes","no"],True)

(3)多对一替换

#将priority列中的yes和no换为True和False
df["priority"]=df["priority"].replace({"yes":True,"no":False})

(4)缺失值替换

#将年龄的缺失值替换为0
df["age"]=df["age"].replace(np.nan,0)

分组

groupby()
df.groupby(by=None, axis=0, level=None, as_index=True, sort=True, group_keys=True, squeeze=False, **kwargs)
查看某列的统计结果,一定要将列名置于groupby后面
(1)使用列名作为分组键

#单列分组,计算各类动物的数量
df.groupby('animal').count()
#多列分组,计算各类动物是否具有优先权的数量
df.groupby(['animal','priority']).count()

(2)使用Series作为分组键

#单列分组,计算各类动物的平均年龄
df.groupby(df['animal'])["age"].mean()
#多列分组(定要使用[]将多列括起来),计算各类动物、是否具备优先权的平均年龄
df.groupby([ df['animal'], df['priority'] ])["age"].mean()

(3)使用aggregate方法查看多种统计值(使用列名作为分组键)
①查看单列多种统计值

#计算各类动物的平均年龄、最大年龄
df.groupby( 'animal' )[‘age’].aggregate( [ 'mean', 'max' ] )

②查看不同列的不同统计值

#按照动物种类、是否具备优先权分组,计算各组的平均年龄以及是否具备优先权的个数
df.groupby(['animal','priority'])['age'].aggregate( { 'animal':'mean','priority':'count' })

(4)重置索引

df.groupby('animal')['age'].aggregate(['mean','count']).reset_index()

数据透视表

pivot_table()
df.pivot_table(values=None, index=None, columns=None, aggfunc=‘mean’, fill_value=None, margins=False, dropna=True, margins_name=‘All’)
values 值,统计运算对象
index 行
columns 列
aggfunc 计算方式
fill_value 对空值的填充
margins 是否显示合计列
dropna 表示是否删除缺失,True表示把一整行全作为缺失值删除
margins_name 表示合计列的列名

df.pivot_table(index="animal",columns="visits",values="age",aggfunc="mean",margins=True)
#表达方式2
#pd.pivot_table(df,index="animal",columns="visits",values="age",aggfunc="mean")

排名

rank()
df.rank(axis=0, method=‘average’, numeric_only=None, na_option=‘keep’, ascending=True, pct=False)
ascending 默认为升序排列,True升序排列False降序排列
method 待排列值有重复值时的处理情况
①average:当待排名的数值有重复值时返回重复值的平均排名;
②first:按重复值出现的先后顺序排名,为连续值;
③min:当待排名的数值有重复值时返回重复值的最小排名;
④max:当待排名的数值有重复值时返回重复值的最大排名
(1)单列排名

df=df.sort_values(by=["age"],ascending=1,na_position='last')
df["rank"]=df["age"].rank(ascending=1,method="min",na_option='keep')

(2)组内排名

df=df.sort_values(by=["animal","age"],ascending=[1,1],na_position='last')
df["rank"]=df["age"].groupby(df["animal"]).rank(ascending=1,method="min",na_option='keep')

其他

(1)计数
value_counts()

#统计次数
df["animal"].value_counts()
#统计频率
df["animal"].value_counts(normalize=True)

(2)唯一值
查看所有唯一值unique()
统计唯一值的数量nunique()

df["animal"].unique()
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值