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>

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

        共 4329字,需瀏覽 9分鐘

         ·

        2022-06-25 09:41

        ↑ 關注 + 星標 ,每天學Python新技能

        后臺回復【大禮包】送你Python自學大禮包

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

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

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

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

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

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

        df.sample(3)

        輸出:

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

        df.columns

        輸出:

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

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

        df.shape

        輸出:

        (5, 2)

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

        缺失值與重復值

        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)

        輸出:

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


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

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

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

        輸出:

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

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

        輸出:

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

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

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

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

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

        輸出:

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

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

        輸出:

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

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

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

        舉例:

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

        輸出:

        df["手機號碼"] = df["手機號碼"].str.slice_replace(3,7,"*"*4)

        輸出:

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

        輸出:

        行/列操作

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

        df.reset_index(drop=True)

        輸出:

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

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

        輸出:

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

        df.T

        輸出:

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

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

        輸出:

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

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

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

        輸出:

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

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

        輸出:

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

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

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

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

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


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

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

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

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

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

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

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

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

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

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

        輸出:

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

        df.select_dtypes("int64")

        輸出:

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

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

        輸出:


        數(shù)值數(shù)據(jù)統(tǒng)計運算

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

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

        舉例:

        df["語文"].max()

        輸出:

        155

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

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

        輸出:

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


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

        參考資料

        [1]

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

        [2]

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

        [3]

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

         



        1. 一個月體驗,終于懂了程序員為什么喜歡用MacBook!

        2. 熬夜總結了 11 種 Numpy 的高級操作!

        3. 員工踩點上下班被HR約談,網(wǎng)友:按時上下班,天經地義



        瀏覽 33
        點贊
        評論
        收藏
        分享

        手機掃一掃分享

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

        手機掃一掃分享

        分享
        舉報
        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经历 | 国产日韩欧美视频在线 | 亚洲AV无码精品久久一区二区 | 亚洲巨爆乳一区二区三区 | 91豆花视频18 | 91人妻论坛 | 国产麻豆91 | 狠狠综合欧美综合欧美色 | jizzjizz少妇 |