<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>

          盤點(diǎn)66個Pandas函數(shù),輕松搞定“數(shù)據(jù)清洗”!

          共 4215字,需瀏覽 9分鐘

           ·

          2022-03-21 19:20

          大家好,我是小五??

          之前黃同學(xué)曾經(jīng)總結(jié)過一些Pandas函數(shù),主要是針對字符串進(jìn)行一系列的操作。在此基礎(chǔ)上我又?jǐn)U展了幾倍,全文較長,建議先收藏。

          今天我們重新盤點(diǎn)66個Pandas函數(shù)合集,包括數(shù)據(jù)預(yù)覽、數(shù)值數(shù)據(jù)操作、文本數(shù)據(jù)操作、行/列操作等等,涉及“數(shù)據(jù)清洗”的方方面面。

          Pandas 是基于NumPy的一種工具,該工具是為解決數(shù)據(jù)分析任務(wù)而創(chuàng)建的。它提供了大量能使我們快速便捷地處理數(shù)據(jù)的函數(shù)和方法。

          數(shù)據(jù)預(yù)覽

          對于探索性數(shù)據(jù)分析來說,做數(shù)據(jù)分析前需要先看一下數(shù)據(jù)的總體概況。info()方法用來查看數(shù)據(jù)集信息,describe()方法將返回描述性統(tǒng)計信息,這兩個函數(shù)大家應(yīng)該都很熟悉了。

          describe方法默認(rèn)只給出數(shù)值型變量的常用統(tǒng)計量,要想對DataFrame中的每個變量進(jìn)行匯總統(tǒng)計,可以將其中的參數(shù)include設(shè)為all。

          head()方法和tail() 方法則是分別顯示數(shù)據(jù)集的前n和后n行數(shù)據(jù)。如果想要隨機(jī)看N行的數(shù)據(jù),可以使用sample()方法。

          df.sample(3)

          輸出:

          da36657bf5c40de61760d67c7c9861a1.webp

          如果要檢查數(shù)據(jù)中各列的數(shù)據(jù)類型,可以使用.dtypes;如果想要值查看所有的列名,可以使用.columns。

          df.columns

          輸出:

          Index(['日期', '銷量'], dtype='object')

          前面介紹的函數(shù)主要是讀取數(shù)據(jù)集的數(shù)據(jù)信息,想要獲得數(shù)據(jù)集的大小(長寬),可以使用.shape方法。

          df.shape

          輸出:

          (5, 2)

          另外,len()可以查看某列的行數(shù),count()則可以查看該列值的有效個數(shù),不包含無效值(Nan)。

          缺失值與重復(fù)值

          Pandas清洗數(shù)據(jù)時,判斷缺失值一般采用isnull()方法。此外,isnull().any()會判斷哪些”列”存在缺失值,isnull().sum()用于將列中為空的個數(shù)統(tǒng)計出來。

          df.isnull().any()

          輸出:

          日期    False
          銷量 True
          dtype: bool

          發(fā)現(xiàn)“銷量”這列存在缺失值后,處理辦法要么刪除dropna() ,要么填充fillna()。

          df.fillna(50)

          輸出:

          abdc9321133d0abe1fcd8de920bbb7bc.webp

          Pandas清洗數(shù)據(jù)時,判斷重復(fù)值一般采用duplicated()方法。如果想要直接刪除重復(fù)值,可以使用drop_duplicates() 方法。此處較為常見,不再過多演示。


          數(shù)值數(shù)據(jù)操作

          我們在處理數(shù)據(jù)的時候,會遇到批量替換的情況,replace()是很好的解決方法。它既支持替換全部或者某一行,也支持替換指定的某個或指定的多個數(shù)值(用字典的形式),還可以使用正則表達(dá)式替換。

          df["編號"].replace(r'BA.$',?value='NEW',?regex=True,?inplace?=?True)

          輸出:

          cd9d300021b2052b5ea2e1ce751cdb6e.webp

          在Pandas模塊中, 調(diào)?rank()?法可以實現(xiàn)數(shù)據(jù)排名。

          df["排名"]?=?df.rank(method="dense").astype("int")

          輸出:

          4e1d297c0f4d8f309d6596385e53210b.webp

          rank()?法中的method參數(shù),它有5個常?選項,可以幫助我們實現(xiàn)不同情況下的排名。

          d14d68e3370fba5106caa0dad3687a5b.webp

          clip()方法,用于對超過或者低于某些數(shù)的數(shù)值進(jìn)行截斷[1],來保證數(shù)值在一定范圍。比如每月的遲到天數(shù)一定是在0-31天之間。

          df["遲到天數(shù)"]?=?df["遲到天數(shù)"].clip(0,31)
          2a5c220675f2d7b3aa6d7a0f8def031b.webp

          唯一值,unique()是以數(shù)組形式返回列的所有唯一值,而nunique()返回的是唯一值的個數(shù)。

          df["gender"].unique()
          df["gender"].nunique()

          輸出:

          022c81d47e97645a7d15e089c6434d48.webp

          在數(shù)值數(shù)據(jù)操作中,apply()函數(shù)的功能是將一個自定義函數(shù)作用于DataFrame的行或者列;applymap()函數(shù)的功能是將自定義函數(shù)作用于DataFrame的所有元素。他們通常也與匿名函數(shù)lambda一起使用。

          df["數(shù)量"].apply(lambda?x:?x+1)

          輸出:

          7a8cb986ec98357b977b4c6be6fd0c91.webp文本數(shù)據(jù)操作

          之前我們曾經(jīng)介紹過經(jīng)常被人忽視的:Pandas 文本型數(shù)據(jù)處理。在對文本型的數(shù)據(jù)進(jìn)行處理時,我們會大量應(yīng)用字符串的函數(shù),來實現(xiàn)對一列文本數(shù)據(jù)進(jìn)行操作[2]。

          函數(shù)方法用法釋義
          cat字符串的拼接
          contains判斷某個字符串是否包含給定字符
          startswith/endswith判斷某個字符串是否以...開頭/結(jié)尾
          get獲取指定位置的字符串
          len計算字符串長度
          upper、lower英文大小寫轉(zhuǎn)換
          pad/center在字符串的左邊、右邊或左右兩邊添加給定字符
          repeat重復(fù)字符串幾次
          slice_replace使用給定的字符串,替換指定的位置的字符
          split分割字符串,將一列擴(kuò)展為多列
          strip、rstrip、lstrip去除空白符、換行符
          findall利用正則表達(dá)式,去字符串中匹配,返回查找結(jié)果的列表
          extract、extractall接受正則表達(dá)式,抽取匹配的字符串(一定要加上括號)

          舉例:

          df.insert(2,?"姓名",?
          ??????????df["姓"].str.cat(df["名"],?sep=""))

          輸出:

          3c52fa54071c26ffe067f1e58af3c991.webp
          df["手機(jī)號碼"]?=?df["手機(jī)號碼"].str.slice_replace(3,7,"*"*4)

          輸出:

          0ee03fb7914fa5d767a4f4e2b85bb78d.webp
          df["地址"].str.extract("([\u4e00-\u9fa5]+)")??

          輸出:

          03bb14d8e2fdd79797d3ee9a1c19e050.webp

          行/列操作

          數(shù)據(jù)清洗時,會將帶空值的行刪除,此時DataFrame或Series類型的數(shù)據(jù)不再是連續(xù)的索引,可以使用reset_index()重置索引。

          df.reset_index(drop=True)

          輸出:

          5976d5871a8a10e1efd7fe8a827a44af.webp

          rename()重命名用于更改行列的標(biāo)簽,即行列的索引??梢詡魅胍粋€字典或者一個函數(shù)。在數(shù)據(jù)預(yù)處理中,比較常用。

          df.rename(columns={'mark':?'sell'},?inplace=True)

          輸出:

          c9a78f92d0e19df068fe338952c1602f.webp

          行列轉(zhuǎn)置,我們可以使用T屬性獲得轉(zhuǎn)置后的DataFrame。

          df.T

          輸出:

          c7572957c838133823c46fb6eec60edc.webp

          刪除行列,可以使用drop()

          df.drop(columns=["mark"])

          輸出:

          866fa3b7875179a41fbdb2b23e587128.webp

          數(shù)據(jù)分析師在進(jìn)行數(shù)據(jù)處理時經(jīng)常會遇到長寬表互轉(zhuǎn)的情況,這也是一道常見的數(shù)據(jù)分析面試題。

          melt()方法可以將寬表轉(zhuǎn)長表,即表格型數(shù)據(jù)轉(zhuǎn)為樹形數(shù)據(jù)。

          df.melt(id_vars="姓名",?var_name="科目",?value_name="成績")

          輸出:

          5e054b105be30443ed81ec6b61572212.webp

          pivot()方法可以將長表轉(zhuǎn)寬表,即樹形數(shù)據(jù)轉(zhuǎn)為表格型數(shù)據(jù)。

          df.pivot(index='姓名',?columns='科目',?values='成績')

          輸出:

          87c870db35fb26581494ebb8e05b3a28.webp

          pivot()其實就是用 set_index()創(chuàng)建層次化索引,再用unstack()重塑

          df1.set_index(['姓名','科目']).unstack('科目')?
          a7e61420c078827904caac792ef8718a.webp

          數(shù)據(jù)分組與數(shù)據(jù)透視表更是一個常見的需求,groupby()方法可以用于數(shù)據(jù)分組。

          df.groupby("科目").mean()
          3d53913f06d3d2ca941bef4f023f7d04.webp

          由于pivot_table()數(shù)據(jù)透視表的參數(shù)比較多,就不再使用案例來演示了,具體用法可參考下圖。

          bd77d34c79b1847d1844d70017ce3352.webp
          數(shù)據(jù)篩選

          如果是篩選行列的話,通常有以下幾種方法:

          有時我們需要按條件選擇部分列、部分行,一般常用的方法有:

          操作語法返回結(jié)果
          選擇列df[col]Series
          按索引選擇行df.loc[label]Series
          按數(shù)字索引選擇行df.iloc[loc]Series
          使用切片選擇行df[:5]DataFrame
          用表達(dá)式篩選行[3]df[bool_vec]DataFrame

          除此以外,還有很多方法/函數(shù)可以用于“數(shù)據(jù)篩選”。

          如果想直接篩選包含特定字符的字符串,可以使用contains()這個方法。

          例如,篩選戶籍地址列中包含“黑龍江”這個字符的所有行。

          df[df["戶籍地址"].str.contains("黑龍江")]

          query()查詢方法也可以用來篩選數(shù)據(jù),比如查詢“語文”成績大于“數(shù)學(xué)”成績的行記錄。

          df.query("語文?>?英語")

          輸出:

          dda8580dcc7a299643c13b5ce137b20e.webp

          select_dtypes()方法可用于篩選某些數(shù)據(jù)類型的變量或列。舉例,我們僅選擇具有數(shù)據(jù)類型'int64'的列。

          df.select_dtypes("int64")

          輸出:

          01a34b16a94335738c50c33edac806b5.webp

          isin()接受一個列表,判斷該列中元素是否在列表中。

          name_list?=?["張三",?"李四"]
          df[df["姓名"].isin(name_list)]

          輸出:

          1750e55ebf339552dbf9d74b2f8a72e0.webp
          數(shù)值數(shù)據(jù)統(tǒng)計運(yùn)算

          在對數(shù)值型的數(shù)據(jù)進(jìn)行統(tǒng)計運(yùn)算時,除了有算術(shù)運(yùn)算、比較預(yù)算還有各種常見的匯總統(tǒng)計運(yùn)行函數(shù),具體如下表所示。

          函數(shù)方法用法釋義
          count非NaN數(shù)據(jù)項計數(shù)
          sum求和
          mean平均值
          median中位數(shù)
          mode眾數(shù)
          max最大值
          min最小值
          std標(biāo)準(zhǔn)差
          var方差
          quantile分位數(shù)
          skew返回偏態(tài)系數(shù)
          kurt返回峰態(tài)系數(shù)

          舉例:

          df["語文"].max()

          輸出:

          155

          最后,再說一個比較常用的統(tǒng)計運(yùn)算函數(shù)——累加cumsum()。

          df["累計銷量"]?=?df["銷量"].cumsum()

          輸出:

          a7767c909adedde364032746e15a62a9.webp

          注:cumprod()方法是指連乘,用于與連加一樣,但使用頻率較少。


          今天我們盤點(diǎn)了66個Pandas函數(shù)合集,但實際還有很多函數(shù)在本文中沒有介紹,包括時間序列、數(shù)據(jù)表的拼接與連接等等。此外,那些類似describe()這種大家非常熟悉的方法都省去了代碼演示。如果大家有在工作生活中進(jìn)行“數(shù)據(jù)清洗”非常有用的Pandas函數(shù),也可以在評論區(qū)交流。

          參考資料

          [1]

          小小明-Pandas的clip和replace正則替換: https://blog.csdn.net/as604049322/article/details/105985763

          [2]

          經(jīng)常被人忽視的:Pandas文本型數(shù)據(jù)處理: https://mp.weixin.qq.com/s/Tdcb6jlyCc7XlQWZlvEd_w

          [3]

          深入淺出Pandas: 利用Python進(jìn)行數(shù)據(jù)處理與分析

          ?

          我們的文章到此就結(jié)束啦,如果你喜歡今天的Python 實戰(zhàn)教程,請持續(xù)關(guān)注Python實用寶典。

          有任何問題,可以在公眾號后臺回復(fù):加群,回答相應(yīng)紅字驗證信息,進(jìn)入互助群詢問。

          原創(chuàng)不易,希望你能在下面點(diǎn)個贊和在看支持我繼續(xù)創(chuàng)作,謝謝!

          點(diǎn)擊下方閱讀原文可獲得更好的閱讀體驗

          Python實用寶典?(pythondict.com)
          不只是一個寶典
          歡迎關(guān)注公眾號:Python實用寶典

          瀏覽 54
          點(diǎn)贊
          評論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報
          評論
          圖片
          表情
          推薦
          點(diǎn)贊
          評論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報
          <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>
                  日韩三级电影在线播放 | A黄片免费看 | 午夜色综合 | 中文在线A∨在线 | 一亚洲精品色视频 |