一個朋友在某運動品牌公司上班,老闆給他佈置了一個處理客戶訂單數據的任務。要求是根據訂單時間和客戶id判斷生成四個新的數據:
python
一、記錄該客戶是第幾回光顧學習
二、上一次的日期時間是何時3d
三、與上次訂單的間隔時間cdn
四、這是一個existing客戶仍是一個new客戶(見定義)blog
推薦下我本身建立的Python學習交流羣960410445,這是Python學習交流的地方,無論你是小白仍是大牛,小編都歡迎,不按期分享乾貨,包括我整理的一份適合零基礎學習Python的資料和入門教程。
排序
文件說明:教程
一、第一列是訂單日期和時間(亂序)it
二、第二列是客戶的idio
三、第三列不須要使用入門
四、60+萬行數據
相關定義以下:
一、existing:這次下單日期時間與上第二天期時間的距離在N天之內,精確到時間(時分秒)
二、new:即超過N天
一、讀取表格的行數據存儲成list,並按照時間列的升序排序。
二、維護一個map(在python裏是字典dict),每一個用戶 id 做爲key,一個二元組(第幾回下單,上一次的日期時間)做爲value。
三、遍歷表格行數據的list。判斷客戶 id 是否已經存在於map中,若首次出現,則置該客戶 id 在map中的value爲[1,'首次下單'],對應行數據新增的4個數據爲[1,'首次下單',該第二天期時間與上第二天期時間差,'new']。若已經存在,則更新map中對應的value爲[原次數+1,該第二天期時間],對應行數據新增的4個數據爲[原次數+1,上第二天期時間,間隔時間,new/existing取決於間隔時間與預設N]。
四、將修改事後的行數據list寫入到Excel工做簿並保存。
讀取表格數據
咱們能夠用xlrd模塊對Excel文件進行讀取,以便進一步分析處理數據。示例代碼以下:
以上代碼成功輸出前100行的日期則說明已經成功讀取到數據。輸出結果以下:
既然讀取文件沒有問題,進一步瀏覽整個文件發現存在多餘的空行和重複的標題行在讀取和轉存中能夠用正則匹配過濾掉這些行。
將讀取的行數據轉存到list中,以便進行排序。
將修改後的行數據list寫入Excel表格並保存爲xslx格式
結果展現
完整代碼