【Pyhon數據處理】Pandas+datetime模塊 實現對日期字段按小時分組,算出記錄數最多/最少的是哪個小時

任務背景【可跳過不看】

某天,fu老師給我發了個QQ,讓我根據借還數據統計出30天內每小時借車人數最高有多少、最低有多少。而就這麼一個短短的QQ消息,這麼一個看似很簡單(實際上也很簡單)的任務,我花了一個多小時才搞定。看了下老師佈置任務的時間,再看了下我回復的時間,屬實尷尬。因此特此將實現過程寫下記錄、以供自己和其他人人蔘考(主要供自己)

 

任務描述:

你擁有一個借車信息的數據表,數據表中有一個字段是借車時間,借車時間字段格式如下所示,例如:

這張數據表存儲了N天的借車信息,有上萬條這樣的借車記錄,現在要求你統計30天內,借車數最大/最小的是哪一天的哪個小時,共借了多少量。其實也就是要對所有記錄按小時分組,統計哪個分組的記錄數最多 、最少。

 

核心思路

1.導出數據到TXT文件,只要導出需要分組的“時間"字段

2.利用pandas讀取txt文件

3.利用datetime模塊,將日期字段記錄轉換爲datetime對象

4.將日期字段升序排序

5.for循環計數,找出最大最小值

 

實現步驟

step1:將數據從數據庫中導出爲txt文件。

這一步比較簡單,由於只需要對時間進行分組,所以導出時只要導出“借車時間”字段即可【其他字段也用不上】。

本文使用的數據庫是MSSQL,這裏強烈安利使用Navicat這個軟件,太好用了,選中數據表右鍵點擊導出嚮導,然後一步步跟着嚮導走就可以了。(用SQL Server Management經常會出各種奇奇怪怪的BUG)。

注意在導出時“文本識別符號要設置爲”無“,日期排序要設置爲"YMD"

 

保存完畢後我的TXT文件數據長這樣

 

step2:利用pandas讀取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

 

step3:利用datetime模塊,將字符串轉換爲datetime對象

Python datetime模塊詳解https://www.cnblogs.com/awakenedy/articles/9182036.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,可以看到結果如下

 

Step4:將日期字段升序排序

這樣做的目的是爲了Step5用for循環操作時不會出現意外,一行代碼就可以搞定

df=df.sort_values(by=0).copy()

Step5:利用for循環實現按小時分組計數

因爲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

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章