?
一個朋友在某運(yùn)動品牌公司上班梗顺,老板給他布置了一個處理客戶訂單數(shù)據(jù)的任務(wù)。要求是根據(jù)訂單時間和客戶id判斷生成四個新的數(shù)據(jù):
1车摄、記錄該客戶是第幾次光顧
2寺谤、上一次的日期時間是什么時候
3、與上次訂單的間隔時間
4吮播、這是一個existing客戶還是一個new客戶(見定義)
文件說明:
1变屁、第一列是訂單日期和時間(亂序)
2、第二列是客戶的id
3意狠、第三列不需要使用
4粟关、60+萬行數(shù)據(jù)
相關(guān)定義如下:
1、existing:此次下單日期時間與上次日期時間的距離在N天以內(nèi)环戈,精確到時間(時分秒)
2闷板、new:即超過N天
?
?
整體思路
1获列、讀取表格的行數(shù)據(jù)存儲成list,并按照時間列的升序排序蛔垢。
2、維護(hù)一個map(在python里是字典dict)迫悠,每個用戶 id 作為key鹏漆,一個二元組(第幾次下單,上一次的日期時間)作為value创泄。
3艺玲、遍歷表格行數(shù)據(jù)的list。判斷客戶 id 是否已經(jīng)存在于map中鞠抑,若首次出現(xiàn)饭聚,則置該客戶 id 在map中的value為[1,'首次下單'],對應(yīng)行數(shù)據(jù)新增的4個數(shù)據(jù)為[1搁拙,'首次下單',該次日期時間與上次日期時間差秒梳,'new']。若已經(jīng)存在箕速,則更新map中對應(yīng)的value為[原次數(shù)+1酪碘,該次日期時間],對應(yīng)行數(shù)據(jù)新增的4個數(shù)據(jù)為[原次數(shù)+1盐茎,上次日期時間兴垦,間隔時間,new/existing取決于間隔時間與預(yù)設(shè)N]字柠。
4探越、將修改過后的行數(shù)據(jù)list寫入到Excel工作簿并保存。
讀取表格數(shù)據(jù)
我們可以用xlrd模塊對Excel文件進(jìn)行讀取窑业,以便進(jìn)一步分析處理數(shù)據(jù)钦幔。示例代碼如下:
?
以上代碼成功輸出前100行的日期則說明已經(jīng)成功讀取到數(shù)據(jù)。輸出結(jié)果如下:
?
?
小編給大家推薦一個學(xué)習(xí)氛圍超好的地方数冬,python交流企鵝裙:【6.1.1节槐,五三零,1.0.1】拐纱!適合在校大學(xué)生铜异,小白,想轉(zhuǎn)行秸架,想通過這個找工作的加入揍庄。裙里有大量學(xué)習(xí)資料,有大神解答交流問題东抹,每晚都有免費(fèi)的直播課程
?
既然讀取文件沒有問題蚂子,進(jìn)一步瀏覽整個文件發(fā)現(xiàn)存在多余的空行和重復(fù)的標(biāo)題行在讀取和轉(zhuǎn)存中可以用正則匹配過濾掉這些行沃测。
?
將讀取的行數(shù)據(jù)轉(zhuǎn)存到list中,以便進(jìn)行排序食茎。
?
將修改后的行數(shù)據(jù)list寫入Excel表格并保存為xslx格式
?
結(jié)果展示
?
完整代碼
?