14個Python處理Excel的常用操作,我先試過了,非常好用

来源:https://www.cnblogs.com/hahaa/archive/2023/02/21/17141182.html
-Advertisement-
Play Games

自從學了Python後就逼迫用Python來處理Excel,所有操作用Python實現。目的是鞏固Python,與增強數據處理能力。這也是我寫這篇文章的初衷。廢話不說了,直接進入正題。 數據是網上找到的銷售數據,長這樣: 一、關聯公式:Vlookup vlookup是excel幾乎最常用的公式,一般 ...


自從學了Python後就逼迫用Python來處理Excel,所有操作用Python實現。目的是鞏固Python,與增強數據處理能力。
這也是我寫這篇文章的初衷。廢話不說了,直接進入正題。

數據是網上找到的銷售數據,長這樣:

一、關聯公式:Vlookup

vlookup是excel幾乎最常用的公式,一般用於兩個表的關聯查詢等。所以我先把這張表分為兩個表。

df1=sale[['訂單明細號','單據日期','地區名稱', '業務員名稱','客戶分類', '存貨編碼', '客戶名稱', '業務員編碼', '存貨名稱', '訂單號',
       '客戶編碼', '部門名稱', '部門編碼']]
df2=sale[['訂單明細號','存貨分類', '稅費', '不含稅金額', '訂單金額', '利潤', '單價','數量']]

 

需求:想知道df1的每一個訂單對應的利潤是多少。

利潤一列存在於df2的表格中,所以想知道df1的每一個訂單對應的利潤是多少。用excel的話首先確認訂單明細號是唯一值,然後在df1新增一列寫:=vlookup(a2,df2!a:h,6,0) ,然後往下拉就ok了。(剩下13個我就不寫excel啦)

那用python是如何實現的呢?

#查看訂單明細號是否重覆,結果是沒。
df1["訂單明細號"].duplicated().value_counts()
df2["訂單明細號"].duplicated().value_counts()

df_c=pd.merge(df1,df2,on="訂單明細號",how="left")
# 新的一年,必須捲死同學、同事,狠狠的提升一波自己的Python實力,這裡我給大家準備了2023最新的Python學習資料、電子書、基礎視頻教程、實戰案例,直接在這個摳裙 708525271 自取即可

 

二、數據透視表

需求:想知道每個地區的業務員分別賺取的利潤總和與利潤平均數。

pd.pivot_table(sale,index="地區名稱",columns="業務員名稱",values="利潤",aggfunc=[np.sum,np.mean])

 

三、對比兩列差異

因為這表每列數據維度都不一樣,比較起來沒啥意義,所以我先做了個訂單明細號的差異再進行比較。

需求:比較訂單明細號與訂單明細號2的差異並顯示出來。

sale["訂單明細號2"]=sale["訂單明細號"]

#在訂單明細號2里前10個都+1.
sale["訂單明細號2"][1:10]=sale["訂單明細號2"][1:10]+1

#差異輸出
result=sale.loc[sale["訂單明細號"].isin(sale["訂單明細號2"])==False]

 

四、去除重覆值

需求:去除業務員編碼的重覆值

sale.drop_duplicates("業務員編碼",inplace=True)

 

五、缺失值處理

先查看銷售數據哪幾列有缺失值。

#列的行數小於index的行數的說明有缺失值,這裡客戶名稱329<335,說明有缺失值
sale.info()

 

需求:用0填充缺失值或則刪除有客戶編碼缺失值的行。
實際上缺失值處理的辦法是很複雜的,這裡只介紹簡單的處理方法,若是數值變數,最常用平均數或中位數或眾數處理,比較複雜的可以用隨機森林模型根據其他維度去預測結果填充。若是分類變數,根據業務邏輯去填充準確性比較高。

比如這裡的需求填充客戶名稱缺失值: 就可以根據存貨分類出現頻率最大的存貨所對應的客戶名稱去填充。

這裡我們用簡單的處理辦法:用0填充缺失值或則刪除有客戶編碼缺失值的行。

#用0填充缺失值
sale["客戶名稱"]=sale["客戶名稱"].fillna(0)
#刪除有客戶編碼缺失值的行
sale.dropna(subset=["客戶編碼"])

 

六、多條件篩選

需求:想知道業務員張愛,在北京區域賣的商品訂單金額大於6000的信息。

sale.loc[(sale["地區名稱"]=="北京")&(sale["業務員名稱"]=="張愛")&(sale["訂單金額"]>5000)]

 

七、 模糊篩選數據

需求:篩選存貨名稱含有"三星"或則含有"索尼"的信息。

sale.loc[sale["存貨名稱"].str.contains("三星|索尼")]

 

八、分類彙總

需求:北京區域各業務員的利潤總額。

sale.groupby(["地區名稱","業務員名稱"])["利潤"].sum()

 

九、條件計算

需求:存貨名稱含“三星字眼”並且稅費高於1000的訂單有幾個?這些訂單的利潤總和和平均利潤是多少?(或者最小值,最大值,四分位數,標註差)

sale.loc[sale["存貨名稱"].str.contains("三星")&(sale["稅費"]>=1000)][["訂單明細號","利潤"]].describe()

 

十、刪除數據間的空格

需求:刪除存貨名稱兩邊的空格。

sale["存貨名稱"].map(lambda s :s.strip(""))

 

十一、數據分列

需求:將日期與時間分列。

sale=pd.merge(sale,pd.DataFrame(sale["單據日期"].str.split(" ",expand=True)),how="inner",left_index=True,right_index=True)

 

十二、異常值替換

首先用describe()函數簡單查看一下數據有無異常值。

#可看到銷項稅有負數,一般不會有這種情況,視它為異常值。
sale.describe()

 

需求:用0代替異常值。

sale["訂單金額"]=sale["訂單金額"].replace(min(sale["訂單金額"]),0)

 

十三、分組

需求:根據利潤數據分佈把地區分組為:“較差”,“中等”,“較好”,“非常好”

首先,當然是查看利潤的數據分佈呀,這裡我們採用四分位數去判斷。

sale.groupby("地區名稱")["利潤"].sum().describe()

 

根據四分位數把地區總利潤為[-9,7091]區間的分組為“較差”,(7091,10952]區間的分組為"中等" (10952,17656]分組為較好,(17656,37556]分組為非常好。

#先建立一個Dataframe
sale_area=pd.DataFrame(sale.groupby("地區名稱")["利潤"].sum()).reset_index()

#設置bins,和分組名稱
bins=[-10,7091,10952,17656,37556]
groups=["較差","中等","較好","非常好"]

#使用cut分組
#sale_area["分組"]=pd.cut(sale_area["利潤"],bins,labels=groups)

 

十四、根據業務邏輯定義標簽

需求:銷售利潤率(即利潤/訂單金額)大於30%的商品信息並標記它為優質商品,小於5%為一般商品。

sale.loc[(sale["利潤"]/sale["訂單金額"])>0.3,"label"]="優質商品"
sale.loc[(sale["利潤"]/sale["訂單金額"])<0.05,"label"]="一般商品"

 

其實excel常用的操作還有很多,我就列舉了14個自己比較常用的,若還想實現哪些操作可以評論一起交流討論,另外我自身也知道我寫python不夠精簡,慣性使用loc。(其實query會比較精簡)。若大家對這幾個操作有更好的寫法請務必評論告知我,感謝!

最後想說說,我覺得最好不要拿excel和python做對比,去研究哪個好用,其實都是工具,excel作為最為廣泛的數據處理工具,壟斷這麼多年必定在數據處理方便也是相當優秀的,有些操作確實python會比較簡單,但也有不少excel操作起來比python簡單的。

比如一個很簡單的操作:對各列求和併在最下一行顯示出來,excel就是對一列總一個sum()函數,然後往左一拉就解決,而python則要定義一個函數(因為python要判斷格式,若非數值型數據直接報錯。)

總結一下就是:無論用哪個工具,能解決問題就是好數據分析師!


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 0、引言 我們在嵌入式開發的過程中,經常可以碰到在一些巨集定義或者是代碼段中使用了do {...} while(0)的語句,從語義上理解,do {...} while(0)內的邏輯就只執行一次,並沒有迴圈執行,粗略看來,似乎畫蛇添足了,那麼為什麼還需要在只執行一次的邏輯外面加上一層do {...} w ...
  • 隊列的概念 在說隊列之前,先回憶一下棧是什麼,我們一般說棧是一個先進後出的數據結構,而隊列就是先進先出的數據結構。 隊列是定在表的一端進行插入,表的另一端進行刪除。 通常,我們稱進數據的一端為隊尾,出數據的一端為隊首(這邊需要註意,經常會記反起碼我是這樣的),數據元素進隊列的過程稱為入隊,出隊列的過 ...
  • 自定義線程池 package com.appletree24; import java.util.ArrayDeque; import java.util.Deque; import java.util.HashSet; import java.util.concurrent.ExecutionEx ...
  • 一、前言 QPython 3c在大佬的改進下,擁有了基於sl4a的FullScreenWrapper2全屏框架。文章將用該框架製作我們的可視化應用【ONE一個】。 二、最終效果如下 三、準備工作 AIDE: 使用佈局助手生成xml佈局代碼 QPython 3C: 使用FullScreenWrappe ...
  • 這一篇主要介紹的是電商網站的統計功能,後臺使用的是Java語言,springMvc框架結合前端Jquer,前端趨勢展示組件使用的是百度開源框架Echarts,這個應該大家或多或少的都有瞭解過,下麵我結合實際項目案例給大家看下項目中是如何實現的。 一、前端頁面到百度下載趨勢圖echarts.js插件, ...
  • ##2.使用I/O復用技術和線程池 網路中有很多用戶會嘗試去connect()這個WebServer上正在listen的這個port,而監聽到的這些連接會排隊等待被accept()。由於用戶連接請求是隨機到達的非同步事件,每當監聽socket(listenfd)listen到新的客戶連接並且放入監聽隊 ...
  • 一、什麼是異常 異常就是程式運行時發生錯誤的信號(在程式出現錯誤時,則會產生一個異常,若程式沒有處理它,則會拋出該異常,程式的運行也隨之終止),在python中,錯誤觸發的異常如下 1 語法錯誤 語法錯誤,根本過不了python解釋器的語法檢測,必須在程式執行前就改正。 # 語法錯誤示範一 if # ...
  • @ResponseBody註解的作用是將controller的方法返回的對象 通過適當的轉換器 轉換為指定的格式之後,寫入到response對象的body區(響應體中),通常用來返回JSON數據或者是XML。 數據,需要註意的呢,在使用此註解之後不會再走視圖處理器,而是直接將數據寫入到輸入流中,它的 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...