赞
踩
某天,fu老师给我发了个QQ,让我根据借还数据统计出30天内每小时借车人数最高有多少、最低有多少。而就这么一个短短的QQ消息,这么一个看似很简单(实际上也很简单)的任务,我花了一个多小时才搞定。看了下老师布置任务的时间,再看了下我回复的时间,属实尴尬。因此特此将实现过程写下记录、以供自己和其他人人参考(主要供自己)
你拥有一个借车信息的数据表,数据表中有一个字段是借车时间,借车时间字段格式如下所示,例如:
这张数据表存储了N天的借车信息,有上万条这样的借车记录,现在要求你统计30天内,借车数最大/最小的是哪一天的哪个小时,共借了多少量。其实也就是要对所有记录按小时分组,统计哪个分组的记录数最多 、最少。
1.导出数据到TXT文件,只要导出需要分组的“时间"字段
2.利用pandas读取txt文件
3.利用datetime模块,将日期字段记录转换为datetime对象
4.将日期字段升序排序
5.for循环计数,找出最大最小值
这一步比较简单,由于只需要对时间进行分组,所以导出时只要导出“借车时间”字段即可【其他字段也用不上】。
本文使用的数据库是MSSQL,这里强烈安利使用Navicat这个软件,太好用了,选中数据表右键点击导出向导,然后一步步跟着向导走就可以了。(用SQL Server Management经常会出各种奇奇怪怪的BUG)。
注意在导出时“文本识别符号要设置为”无“,日期排序要设置为"YMD"
保存完毕后我的TXT文件数据长这样
pandas.read_csv() !!!
- import pandas as pd
- pd.read_csv('txt文件的路径',sep=',',header=None)
Pandas相关知识点在这里就不展开了
安利一个pandas教程网站:https://www.yiibai.com/pandas/python_pandas_series.html
越来越觉得python的一些库功能真的很强大,之前我和同学手写代码好不容易写了一个把日期转换成秒的函数还经常报错通用性差。现在才知道python有这么方便的模块早就把功能都实现了,相见恨晚!datetime模块的具体用法可以参考上面的网站,这里我只把我做的将日期转换为秒的过程写出来。
- import datetime
- import pandas as pd
-
- def string_toDatetime(st):
- return datetime.datetime.strptime(st, "%Y/%m/%d %H:%M:%S")
-
- df = pd.read_csv('文件名.txt',sep=',',header=None)
- df[0]=df[0].apply(string_toDatetime).copy()
-
于是乎打印df,可以看到结果如下
这样做的目的是为了Step5用for循环操作时不会出现意外,一行代码就可以搞定
df=df.sort_values(by=0).copy()
因为datetime.hour可以获取日期里是第几个小时,所以一切都变得简单了
代码与注释如下
- mmax=-1 #保存最大值
- mmin=9999#保存最小值
- pre=0 #上一个小时
- temp=0 #临时变量,用来记录当前小时的记录数
-
- for index,row in df.iterrows():
- if pre!=row[0].hour: #如果当前的小时,不等于上一个小时,判断最大值最小值是否需要更新
- pre=row[0].hour
- if temp>mmax:
- mmax=temp
- maxdate=row[0]
- elif temp<mmin:
- mmin=temp
- mindate=row[0]
- temp=0
- temp+=1
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。