社区所有版块导航
Python
python开源   Django   Python   DjangoApp   pycharm  
DATA
docker   Elasticsearch  
aigc
aigc   chatgpt  
WEB开发
linux   MongoDB   Redis   DATABASE   NGINX   其他Web框架   web工具   zookeeper   tornado   NoSql   Bootstrap   js   peewee   Git   bottle   IE   MQ   Jquery  
机器学习
机器学习算法  
Python88.com
反馈   公告   社区推广  
产品
短视频  
印度
印度  
Py学习  »  Python

Python数据科学实践 | Pandas 4

狗熊会 • 4 年前 • 432 次点击  

大家好,基于Python的数据科学实践课程又到来了,大家尽情学习吧。本期内容主要由智亿同学与政委联合推出。

上一节通过火锅团购数据学习了:

  • 如何使用Pandas的apply()函数;

  • 如何使用Pandas进行分组和聚合操作。

这一节我们继续来学习Pandas这个神器的其他武功:

  • 如何使用Pandas操作时间序列;

  • 如何使用Pandas与Sql结合。


1.   时间序列—跨不过的坎

光看商家等级找人均消费最低的还远远达不到“省钱”的目的。还需要什么?团购的具体信息啊!找到等级高消费低的商户的某个中意的团购才能从“一丝狡黠地微笑”变成“一阵狰狞的狂笑”。

这里需要读入另一个文件:coupon_nm.xlsx,这一文件存放团购信息。

1coupon_data = pd.read_excel("https://github.com/xiangyuchang/xiangyuchang.github.io/blob/master/BearData/coupon_nm.xlsx?raw=true"#读入数据
2
3#清洗数据,把没有评价的团购,购买人数为0的团购等去掉
4coupon_data = coupon_data[coupon_data['团购评价'] != '暂无评价'][coupon_data['评价人数'] != '暂无评价']
5coupon_data = coupon_data[coupon_data['购买人数'] != 0]
6coupon_data = coupon_data.dropna()
7coupon_data.head(2)

运行结果如图1所示。

图1 团购信息表

由于熊大来西安是今年9月份,和团购到期时间不一定对的上,到时候买了团购又过期了可真是得不偿失,所以,我们得对到期时间做一些处理,先将”到期时间“转换成日期,再按条件过滤即可。

表1 转换时间

例1 转换时间

1print(type(coupon_data['到期时间'].iloc[0])) #打印第一个团购的到期时间的数据类型
2coupon_data['到期时间'] = pd.to_datetime(coupon_data['到期时间'], format='%Y-%m-%d'#转换团购到期时间为时间类型数据
3print(type(coupon_data['到期时间'].iloc[0])) #重新查看第一个团购的到期时间的数据类型
4
5from datetime import datetime # 字符串转化为时间类型
6filter_coupon_data = coupon_data[coupon_data['到期时间'] > datetime.strptime('2018-09-01''%Y-%m-%d')] #获得2018年9月1日后的团购
7filter_coupon_data.head()

运行结果如图2。

图2 筛选时间

终于删选出来了,熊大赶紧来吧嘻嘻。


2.   合并—Pandas&Sql完美结合


虽然团购信息被筛选了出来,但是放在两个表里毕竟不方便看或者建模,因此,还需要把这些信息合并在一张表中。

聪明的小伙伴们肯定第一反应是:要是用SQL语句merge一下就好了!Pandas里有没有类似merge的方法呢?抱歉,没有相似的,只有一模一样的方法。(*^▽^*)贴心的Pandas。

难道就这么直接合并吗?显然不行——一家店可有好几个团购呢,要是直接合并,会出现很多空值。怎么处理呢?为简单起见,我们对其中的某些字段取平均后,再进行合并。

例2 分组聚合

1filter_coupon_data2 = filter_coupon_data.groupby('店名').agg({
2    '团购价''mean',
3    '购买人数''mean',
4}) #按照店名分拆,用团购价与购买人数均值进行聚合
5filter_coupon_data2.head(10)

运行结果如图3(部分)。

图3

合并使用的函数如下表。

表2 合并

例3 合并

1filter_coupon_data2['店名'] = filter_coupon_data2.index #添加新列’店名‘
2#重新按照编号构建Index
3filter_coupon_data2.index =  list(range(len(filter_coupon_data2))) 
4filter_coupon_data2.head(10

终于要合并的两张表格都有店名的信息了,可以合并了。

1merge_data = pd.merge(left=raw_data2, right=filter_coupon_data2, on='店名', how='inner'#按照店名合并, raw_data2请按照上几期内容构建
2merge_data['购买人数'] = merge_data['购买人数'].astype(int) #转化为整数
3print(merge_data.shape)
4
5merge_data.head()

运行结果如图4。

图4

咦?怎么合并后的维度只有199行了?因为我们使用了inner的合并方式,只有199家商户有团购活动。注意,由于购买人数一定是整数,所以需要转换成int类型。

最后,可以利用merge_data.to_excel函数将处理完的文件保存成新的文件,注意不要覆盖原文件,以防处理错误导致原文件、新文件都不可用。由于接口和使用方法与读入数据的接口类似,这里不再详细展开接口用法。

好了,今天就先介绍到这里。


作业:载入pandas包,读入coupon_nm的文件。利用本节所学过的知识完成如下内容:首先,把时间修改为美国常用的模式“月-日-年”。其次,把到期时间按照“春-夏-秋-冬”分成四个团购表。最后,合并春夏表写入为“上半年团购到期表”与合并秋冬表写入“下半年团购到期表”。这里“春夏秋冬”自己定义哈哈哈。


往期精彩回顾
初步搭建数据科学工作环境

Conda的使用

Spyder入门

Jupyter入门

Markdown

简单读写数据

数据类型

数据结构

控制流

函数与模块

Numpy

pandas1

pandas2

pandas3












点击这里下载数据
Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/47717
 
432 次点击