使用 Python 分析 EXCEL 數據:彙總分析圖書訂單數據

問題的提出

“圖書銷售訂單數據. xlsx” 是某出版單位通過網絡平臺銷售的圖書訂單數據,時間從 2018 年到 2021 年。

要求通過 “下單時間” 字段按年度彙總圖書銷售月度訂單數據,彙總字段爲訂單總額、訂單數量、折扣總額。彙總結果寫入到新 EXCEL 文件,彙總的年度名稱爲工作表名稱,彙總結果如下圖所示。

編程思路

分析數據,確定需要彙總的字段

觀察 “下單時間” 字段,該字段時間格式爲 “yyyy-mm-dd hh:mm:ss”, 可以從該字段獲取日期和時間。“訂單價格” 字段爲每個訂單的支付金額,對該字段在年度內按月累加彙總,彙總結果字段爲 “訂單總額”。“折扣” 字段爲每個訂單的折扣金額,對該字段在年度內按月累加彙總,彙總結果字段爲 “折扣總額”。彙總結果字段“訂單數量” 的彙總字段,需要認真分析,要求該字段的值不能重複,才能彙總出正確的訂單數量,仔細觀察所有字段,“訂單編號”字段滿足 “訂單數量” 彙總需求。

分析需求,梳理彙總思路

訂單數據範圍爲 2018~2021 年,需要彙總出 2018 年、2019 年、2020 年、2021 年的月度訂單數據。

按 “下單時間” 字段以月分組,在分組過程中同時進行 “訂單價格”、“折扣”、“訂單編號” 字段的聚合。“訂單價格”、“折扣”字段進行累加聚合,“訂單編號”字段進行數量聚合。分組聚合後的數據再按 “下單時間” 字段以年分組,至此完成訂單數據的彙總統計並寫入 EXCEL 文件。

程序設計

案例需求相對簡單,程序代碼編寫到一個模塊即可。程序流程如下圖所示。

程序需要導入 Pandas 庫,Pandas 庫的 read_excel() 函數可以直接讀取 EXCEL 數據,並返回 DataFrame 數據對象。

DataFrame 數據對象的 groupby()函數可以對 DataFrame 按條件分組並聚合指定的字段,分組聚合返回的數據還是 DataFrame 數據對象。分組條件是按月分組,分組字段爲 “下單時間”,應用 Pandas 的 Groupy() 函數爲 groupby()函數設置按月分組指令。

得到按月分組的 DataFrame 數據對象後,再次應用 groupby() 函數對數據按年分組。最後調用 Pandas 的 ExcelWriter 對象將分組數據寫入 EXCEL 文件。

程序編碼

所有程序代碼放置在一個模塊內,EXCEL 數據文件與程序需要在同一個目錄。

# 導入pandas庫
import pandas as pd
# EXCEL路徑
seal_path ="圖書銷售訂單數據.xlsx"
# EXCEL輸出路徑
excel_path="summary.xlsx"
# 新工作表名稱
sheet_name ="月彙總"
# 程序入口
if __name__ == '__main__':
    # 讀取EXCEL文件,讀取訂單工作表
    df = pd.read_excel(seal_path,sheet_name='Sheet2')
    # 調用DataFrame對象的groupby以字段“下單時間”按月分組
    df_group=df.groupby(pd.Grouper(key="下單時間",axis=0, freq='M')).agg({"訂單價格":"sum","訂單編號":"count","折扣":"sum"})
    # 修改索引名稱
    df_group = df_group.rename(columns={"訂單價格":"訂單總額","訂單編號":"訂單數量","折扣":"折扣總額"})
    # 按年度分組
    df_group.insert(0,"下單時間",df_group.index)
    df_group=df_group.groupby(pd.Grouper(key="下單時間",freq='Y'))
    # 輸出到EXCEL
    # 實例化ExcelWriter對象
    writer = pd.ExcelWriter(excel_path)
    for name,data in df_group:
        data.to_excel(writer,index=False,sheet_name=str(name.year))
    # 調用writer對象的save方法保存EXCEL文件
    writer.save()
    # 關閉文件
writer.close()

Grouper() 函數允許用戶爲目標對象指定 groupby 指令,參數 key 爲分組的字段名稱,參數 freq 設置時間分組頻率。例如:freq='Y'按年分組,freq='M'按月分組,freq='120Min'按兩小時分組。

本文由 Readfog 進行 AMP 轉碼,版權歸原作者所有。
來源https://mp.weixin.qq.com/s/JK6XB0Sb9IRTWGG4AO5z5w