現在Python橫行的年代,財務、人事、行政等等崗位多少得學點Python,省事又不費腦!
所有操作都用Python自動實作,加班?不存在的!

excel和python其實都是工具,不要也不用拿去做對比,研究哪個好用,excel作為最為全球廣泛的資料處理工具,壟斷多年,肯定在資料處理方面有自己的優點,Python只是令 一些龐大的,費時間的操作加速處理,方便作業嘛,
當然也有很多excel的操作比用Python自動處理更加簡單方便,
比如:對各列求和并在最下一行顯示出來,excel就是對一列總一個sum()函式,然后往左一拉就解決,而python則要定義一個函式,python要判斷格式,若非數值型資料會直接,我就不一一舉例了!
好了,我們開始正題,
在網上找的銷售資料,差不多長這樣,
銷售資料
1、資料透視表
需求
想知道每個地區的業務員分別賺取的利潤總和與利潤平均數
pd.pivot_table(sale,index="地區名稱",columns="業務員名稱",values="利潤",aggfunc=[np.sum,np.mean])
#兄弟們學習python,有時候不知道怎么學,從哪里開始學,掌握了基本的一#些語法或者做了兩個案例后,不知道下一步怎么走,不知道如何去學習更加高#深的知識, #那么對于這些大兄弟們,我準備了大量的免費視頻教程,PDF電子書籍,以及#視頻源的源代碼! #還會有大佬解答! #都在這個裙里了 872937351 #歡迎加入,一起討論 一起學習!
2、去除重復值
需求
去除業務員編碼的重復值
sale.drop_duplicates("業務員編碼",inplace=True)
3、分類匯總
需求
北京區域各業務員的利潤總額
sale.groupby(["地區名稱","業務員名稱"])["利潤"].sum()
4、關聯公式:Vlookup
vlookup是excel幾乎最常用的公式,一般用于兩個表的關聯查詢等,
所以我先把這張表分為兩個表,
df1=sale[['訂單明細號','單據日期','地區名稱', '業務員名稱','客戶分類', '存貨編碼', '客戶名稱', '業務員編碼', '存貨名稱', '訂單號', '客戶編碼', '部門名稱', '部門編碼']] df2=sale[['訂單明細號','存貨分類', '稅費', '不含稅金額', '訂單金額', '利潤', '單價','數量']]
需求
想知道df1的每一個訂單對應的利潤是多少
利潤一列存在于df2的表格中,所以想知道df1的每一個訂單對應的利潤是多少,
用excel的話首先確認訂單明細號是唯一值,然后在df1新增一列寫:=vlookup(a2,df2!a:h,6,0) ,然后往下拉就ok了,
那用python是如何實作的呢?
#查看訂單明細號是否重復,結果是沒, df1["訂單明細號"].duplicated().value_counts() df2["訂單明細號"].duplicated().value_counts() df_c=pd.merge(df1,df2,on="訂單明細號",how="left")
5、條件計算
需求
存貨名稱含“三星字眼”并且稅費高于1000的訂單有幾個?
這些訂單的利潤總和和平均利潤是多少?(或者最小值,最大值,四分位數,標注差)
sale.loc[sale["存貨名稱"].str.contains("三星")&(sale["稅費"]>=1000)][["訂單明細號","利潤"]].describe()
6、分組
需求
根據利潤資料分布把地區分組為:“較差”,“中等”,“較好”,“非常好”
首先,當然是查看利潤的資料分布呀,這里我們采用四分位數去判斷,
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)
7、對比兩列差異
因為這表每列資料維度都不一樣,比較起來沒啥意義,所以我先做了個訂單明細號的差異再進行比較,
需求:比較訂單明細號與訂單明細號2的差異并顯示出來,
sale["訂單明細號2"]=sale["訂單明細號"] #在訂單明細號2里前10個都+1. sale["訂單明細號2"][1:10]=sale["訂單明細號2"][1:10]+1 #差異輸出 result=sale.loc[sale["訂單明細號"].isin(sale["訂單明細號2"])==False]
8、例外值替換
首先用describe()函式簡單查看一下資料有無例外值,
#可看到銷項稅有負數,一般不會有這種情況,視它為例外值, sale.describe()
需求
用0代替例外值,
sale["訂單金額"]=sale["訂單金額"].replace(min(sale["訂單金額"]),0)
9、缺失值處理
先查看銷售資料哪幾列有缺失值
#列的行數小于index的行數的說明有缺失值,這里客戶名稱329<335,說明有缺失值 sale.info()

需求
用0填充缺失值或則洗掉有客戶編碼缺失值的行
實際上缺失值處理的辦法是很復雜的,這里只介紹簡單的處理方法,若是數值變數,最常用平均數或中位數或眾數處理,比較復雜的可以用隨機森林模型根據其他維度去預測結果填充,
若是分類變數,根據業務邏輯去填充準確性比較高,
比如這里的需求填充客戶名稱缺失值:就可以根據存貨分類出現頻率最大的存貨所對應的客戶名稱去填充,
這里我們用簡單的處理辦法:用0填充缺失值或則洗掉有客戶編碼缺失值的行,
#用0填充缺失值 sale["客戶名稱"]=sale["客戶名稱"].fillna(0) #洗掉有客戶編碼缺失值的行 sale.dropna(subset=["客戶編碼"])
10、資料分列

需求
將日期與時間分列
sale=pd.merge(sale,pd.DataFrame(sale["單據日期"].str.split(" ",expand=True)),how="inner",left_index=True,right_index=True)
11、 模糊篩選資料
需求
篩選存貨名稱含有"三星"或則含有"索尼"的資訊
sale.loc[sale["存貨名稱"].str.contains("三星|索尼")]
12、洗掉資料間的空格
需求
洗掉存貨名稱兩邊的空格
sale["存貨名稱"].map(lambda s :s.strip(""))
13、根據業務邏輯定義標簽
需求
銷售利潤率(即利潤/訂單金額)大于30%的商品資訊并標記它為優質商品,小于5%為一般商品,
sale.loc[(sale["利潤"]/sale["訂單金額"])>0.3,"label"]="優質商品" sale.loc[(sale["利潤"]/sale["訂單金額"])<0.05,"label"]="一般商品"
14、多條件篩選
需求
想知道業務員張愛,在北京區域賣的商品訂單金額大于6000的資訊,
sale.loc[(sale["地區名稱"]=="北京")&(sale["業務員名稱"]=="張愛")&(sale["訂單金額"]>5000)]
這里只是列舉了一些比較常用的,但是excel常用的操作還有很多,如果還想實作哪些操作,大家可以在評論區一起交流,大家如果對這這些操作有更好的寫法,也可以在評論區一起交流!感謝!

.
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/319576.html
標籤:Python
上一篇:【Python爬蟲】入門級爬蟲案例,20行代碼爬取網站圖片(附原始碼)
下一篇:使用python進行視頻圖片提取
