<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          牛掰!用Python處理Excel的14個常用操作總結(jié)!

          共 4730字,需瀏覽 10分鐘

           ·

          2023-02-24 08:15

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

          數(shù)據(jù)是網(wǎng)上找到的銷售數(shù)據(jù),長這樣:

          eb9c6515ad900938478b441d5eb2a788.webp

          一、關(guān)聯(lián)公式:Vlookup

          vlookup是excel幾乎最常用的公式,一般用于兩個表的關(guān)聯(lián)查詢等。所以我先把這張表分為兩個表。

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

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

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

          那用python是如何實現(xiàn)的呢?

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

          df_c=pd.merge(df1,df2,on="訂單明細號",how="left")

          二、數(shù)據(jù)透視表

          需求:想知道每個地區(qū)的業(yè)務(wù)員分別賺取的利潤總和與利潤平均數(shù)。

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

          三、對比兩列差異

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

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

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

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

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

          四、去除重復(fù)值

          需求:去除業(yè)務(wù)員編碼的重復(fù)值

              sale.drop_duplicates("業(yè)務(wù)員編碼",inplace=True)
            

          五、缺失值處理

          先查看銷售數(shù)據(jù)哪幾列有缺失值。

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

          347d4d6c99836d437b571a9b23e60d89.webp

          需求:用0填充缺失值或則刪除有客戶編碼缺失值的行。 實際上缺失值處理的辦法是很復(fù)雜的,這里只介紹簡單的處理方法,若是數(shù)值變量,最常用平均數(shù)或中位數(shù)或眾數(shù)處理,比較復(fù)雜的可以用隨機森林模型根據(jù)其他維度去預(yù)測結(jié)果填充。若是分類變量,根據(jù)業(yè)務(wù)邏輯去填充準確性比較高。比如這里的需求填充客戶名稱缺失值:就可以根據(jù)存貨分類出現(xiàn)頻率最大的存貨所對應(yīng)的客戶名稱去填充。

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

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

          六、多條件篩選

          需求:想知道業(yè)務(wù)員張愛,在北京區(qū)域賣的商品訂單金額大于6000的信息。

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

          七、 模糊篩選數(shù)據(jù)

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

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

          八、分類匯總

          需求:北京區(qū)域各業(yè)務(wù)員的利潤總額。

              sale.groupby(["地區(qū)名稱","業(yè)務(wù)員名稱"])["利潤"].sum()
            

          九、條件計算

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

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

          173912753e8e0623b1445e795e2ca03f.webp

          十、刪除數(shù)據(jù)間的空格

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

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

          十一、數(shù)據(jù)分列

          96a0056845631067728681f4d36cf2cc.webp

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

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

          十二、異常值替換

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

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

          79f4e86ee55aeba3c7079cb93704aa18.webp

          需求:用0代替異常值。

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

          十三、分組

          需求:根據(jù)利潤數(shù)據(jù)分布把地區(qū)分組為:"較差","中等","較好","非常好"

          首先,當然是查看利潤的數(shù)據(jù)分布呀,這里我們采用四分位數(shù)去判斷。

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

          52d736e528b2559e3ce18c996f5066f1.webp

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

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

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

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

          十四、根據(jù)業(yè)務(wù)邏輯定義標簽

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

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

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

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

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

          總結(jié)一下就是:無論用哪個工具,能解決問題就是好數(shù)據(jù)分析師!

          瀏覽 50
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          評論
          圖片
          表情
          推薦
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  人人色人人 | 韩国毛片在线播放 | 欧美操逼视频有吗? | 亚洲无码精品在线 | 天天日天天噜 |