python 数据处理模块_零基础学习Python数据分析:数据处理模块Pandas使用(3)

这一节将学习的是Pandas中对数据的一些统计计算与总结,在学习如何总结整个数据集之后,还将深入研究数据分组,从而允许我们汇总具有共同点的数据集。我们还将学习如何创建数据透视表,这是总结只有两列的数据集数据间相关关系的好方法。

Unit 2 Data Manipulation with Pandas

Lesson 3 Aggregates in Pandas

一、DataFrame的统计计算

在前一课中,我们学习了如何对列中的每个值执行操作的.apply语句。在这一节中,我们将学习如何将列中的所有值组合计算。怎么做呢,像Excel一样,还是运用Python里的一些基本函数。一般的代码模板如下

df.column_name.command()

先以几个现实中的例子开始吧:

DataFrame customers包含了客户姓名和年龄,求客户年龄均值

print customers.age

>> [23, 25, 31, 35, 35, 46, 62]

print customers.age.median()

>> 35

DataFrame shipments包含了销售的T恤、颜色,求还剩下一件的都是啥颜色T恤

print inventory.color

>> ['blue', 'blue', 'blue', 'blue', 'blue', 'green', 'green', 'orange', 'orange', 'orange']

print inventory.color.unique()

>> ['blue', 'green', 'orange']

看了上面两个例子应该懂了,下面列出了一些常用的统计函数的含义。

二、分类统计

pandas提供了分类统计的语句和SQL中的一样为.groupby。代码模板如下

df.groupby('column1').column2.command()

数据按照column1进行分组为一组组数据,然后对column2执行command。

例如,学生的作业成绩表中分别有学生名student和所做的作业assignment_name和所对应的成绩grade三列。每个学生对应一或多套作业。

想要计算出不同学生的平均成绩,代码为

import pandas as pd

student_grade = pd.read_csv('student_grade.csv')

grades = student_grade.groupby('student').grade.mean()

print(grades)

print(type(grades))

在使用groupby之后,我们经常需要清理得到的数据结果。groupby函数创建了一个新的Series,而不是DataFrame。 为了得到一个新的DataFrame,我们可以使用reset_index()。 这将把我们的数据变成一个DataFrame,并将这些索引移动到它们自己的列中。

这时只需要在groupby语句后加reset_index()

df.groupby('column1').column2.measurement().reset_index()

例如计算库存中每种茶件数,

teas_counts = teas.groupby('category').id.count().reset_index()

teas_counts = teas_counts.rename(columns={"id": "counts"})

print(teas_counts)

那么,与上一节类似的,如果执行的函数比求平均值,计数等更为复杂,就要结合到Lambda函数和apply语句。假设要计算不同颜色鞋子价格的1/4分割线(25%鞋子便宜于此价格,75%的鞋子贵于此价格)来确保品牌一直有便宜的鞋子出售。

import numpy as np

import pandas as pd

orders = pd.read_csv('orders.csv')

cheap_shoes=orders.groupby('shoe_color').price.apply(lambda x: np.percentile(x,25)).reset_index()

print(cheap_shoes)

reset_index()为最后一步

分类统计:更复杂的情况下,我们想要按多个列进行分组。 同样可以用groupby语句来轻松完成此操作。

上列中,我们的采购团队认为,某些shoe_type / shoe_color组合在今年特别受欢迎(例如,蓝色芭蕾平底鞋曾在巴黎风靡一时)。于是看一下每种鞋子的件数shoe_counts(按shoe_type / shoe_color分类)。

import numpy as np

import pandas as pd

orders = pd.read_csv('orders.csv')

shoe_counts=orders.groupby(['shoe_type','shoe_color']).id.count().reset_index()

shoe_counts=shoe_counts.rename(columns={'id':'counts'})

#No 'apply' function

print(shoe_counts)

三、数据透视表

我们在学习Excel的时候都使用过数据透视表,它能直观地展示数据。当我们跨越多列执行groupby时,我们经常想要更改数据的显示方式。 例如,回想一下我们运营连锁店的例子,并且有关于不同种类不同颜色鞋的销售数量的数据:

我们怀疑不同种类的鞋的不同颜色会有不同的销售额,那么,比较两表,这样比较会更有效率,因为我们不会将shoe_type搞混了。

生成PIvot Table的模板为:

df.pivot(columns='ColumnToPivot',

index='ColumnToBeRows',

values='ColumnToBeValues')

例如,上面的数据透视表的代码为

import numpy as np

import pandas as pd

orders = pd.read_csv('orders.csv')

shoe_counts = orders.groupby(['shoe_type', 'shoe_color']).id.count().reset_index()

shoe_counts_pivot=shoe_counts.pivot(

columns='shoe_color',

index='shoe_type',

values='id').reset_index()

print(shoe_counts_pivot)

Ps.我在学习pandas时,还学到了一个Python中 ' ~ ' (取反) 操作符。即如果结果是True,则返回False;结果为False,返回True。

创建新列反映某列是否为空值(是空值则返回False,反之True):

ad_clicks['is_click'] = ~ad_clicks.ad_click_timestamp.isnull()

在前加~即可。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值