1. <strong id="7actg"></strong>
    2. <table id="7actg"></table>

    3. <address id="7actg"></address>
      <address id="7actg"></address>
      1. <object id="7actg"><tt id="7actg"></tt></object>

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

        共 4477字,需瀏覽 9分鐘

         ·

        2022-04-18 00:41

        導(dǎo)讀:之前的文章曾經(jīng)總結(jié)過(guò)一些Pandas函數(shù),主要是針對(duì)字符串進(jìn)行一系列的操作。在此基礎(chǔ)上,本文又?jǐn)U展了幾倍,全文較長(zhǎng),建議先收藏。


        作者:朱小五
        來(lái)源:凹凸數(shù)據(jù)(ID:alltodata)


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

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


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

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

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

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

        df.sample(3)

        輸出:


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

        df.columns

        輸出:

        Index(['日期',?'銷(xiāo)量'],?dtype='object')

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

        df.shape

        輸出:

        (5,?2)

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


        02 缺失值與重復(fù)值

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

        df.isnull().any()

        輸出:

        日期????False
        銷(xiāo)量????True
        dtype:?bool

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

        df.fillna(50)

        輸出:


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


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

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

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

        輸出:


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

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

        輸出:


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


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

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


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

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

        輸出:


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

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

        輸出:



        04 文本數(shù)據(jù)操作

        在對(duì)文本型的數(shù)據(jù)進(jìn)行處理時(shí),我們會(huì)大量應(yīng)用字符串的函數(shù),來(lái)實(shí)現(xiàn)對(duì)一列文本數(shù)據(jù)進(jìn)行操作[2]。

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

        舉例:

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

        輸出:


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

        輸出:


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

        輸出:



        05 行/列操作

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

        df.reset_index(drop=True)

        輸出:


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

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

        輸出:


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

        df.T

        輸出:

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

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

        輸出:


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

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

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

        輸出:


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

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

        輸出:


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

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


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

        df.groupby("科目").mean()


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



        06 數(shù)據(jù)篩選

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

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

        操作
        語(yǔ)法
        返回結(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()這個(gè)方法。

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

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

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

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

        輸出:


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

        df.select_dtypes("int64")

        輸出:


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

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

        輸出:



        07 數(shù)值數(shù)據(jù)統(tǒng)計(jì)運(yùn)算

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

        • count:非NaN數(shù)據(jù)項(xiàng)計(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["語(yǔ)文"].max()

        輸出:

        155

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

        df["累計(jì)銷(xiāo)量"]?=?df["銷(xiāo)量"].cumsum()

        輸出:


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

        今天我們盤(pán)點(diǎn)了66個(gè)Pandas函數(shù)合集,但實(shí)際還有很多函數(shù)在本文中沒(méi)有介紹,包括時(shí)間序列、數(shù)據(jù)表的拼接與連接等等。此外,那些類似describe()這種大家非常熟悉的方法都省去了代碼演示。如果大家有在工作生活中進(jìn)行“數(shù)據(jù)清洗”非常有用的Pandas函數(shù),也可以在評(píng)論區(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ù)處理與分析》


        延伸閱讀??


        延伸閱讀《深入淺出Pandas


        推薦語(yǔ):《深入淺出Pandas》這是一本全面覆蓋了Pandas使用者的普遍需求和痛點(diǎn)的著作,基于實(shí)用、易學(xué)的原則,從功能、使用、原理等多個(gè)維度對(duì)Pandas做了全方位的詳細(xì)講解,既是初學(xué)者系統(tǒng)學(xué)習(xí)Pandas難得的入門(mén)書(shū),又是有經(jīng)驗(yàn)的Python工程師案頭必不可少的查詢手冊(cè)。

        干貨直達(dá)??



        更多精彩??

        在公眾號(hào)對(duì)話框輸入以下關(guān)鍵詞
        查看更多優(yōu)質(zhì)內(nèi)容!

        讀書(shū)?|?書(shū)單?|?干貨?|?講明白?|?神操作?|?手把手
        大數(shù)據(jù)?|?云計(jì)算?|?數(shù)據(jù)庫(kù)?|?Python?|?爬蟲(chóng)?|?可視化
        AI?|?人工智能?|?機(jī)器學(xué)習(xí)?|?深度學(xué)習(xí)?|?NLP
        5G?|?中臺(tái)?|?用戶畫(huà)像?|?數(shù)學(xué)?|?算法?|?數(shù)字孿生

        據(jù)統(tǒng)計(jì),99%的大咖都關(guān)注了這個(gè)公眾號(hào)
        ??
        瀏覽 14
        點(diǎn)贊
        評(píng)論
        收藏
        分享

        手機(jī)掃一掃分享

        分享
        舉報(bào)
        評(píng)論
        圖片
        表情
        推薦
        點(diǎn)贊
        評(píng)論
        收藏
        分享

        手機(jī)掃一掃分享

        分享
        舉報(bào)
        1. <strong id="7actg"></strong>
        2. <table id="7actg"></table>

        3. <address id="7actg"></address>
          <address id="7actg"></address>
          1. <object id="7actg"><tt id="7actg"></tt></object>
            国产精品 - 色哟哟 | 色噜噜狠狠一区二区三区Av蜜芽 | 女警乳链乳环蒂环调教 | 一级无码黄片 | 性感美女操逼视频 | 久久老鸭窝 | 97国产视频 | 国产中文字幕在线 | 我和工厂少妇的性系列 | 在熟睡夫面前侵犯我在线播放 |