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

          30 個(gè) Python 函數(shù),加速你的數(shù)據(jù)分析處理速度!

          共 2473字,需瀏覽 5分鐘

           ·

          2021-11-16 20:44

          ↑?關(guān)注 + 星標(biāo)?,每天學(xué)Python新技能

          后臺(tái)回復(fù)【大禮包】送你Python自學(xué)大禮包

          Pandas 是 Python 中最廣泛使用的數(shù)據(jù)分析和操作庫(kù)。它提供了許多功能和方法,可以加快「數(shù)據(jù)分析」「預(yù)處理」步驟。

          為了更好的學(xué)習(xí) Python,我將以客戶流失數(shù)據(jù)集為例,分享 「30」 個(gè)在數(shù)據(jù)分析過程中最常使用的函數(shù)和方法,數(shù)據(jù)「文末」可以下載。

          數(shù)據(jù)如下所示:

          import?numpy?as?np
          import?pandas?as?pd
          df?=?pd.read_csv("Churn_Modelling.csv")
          print(df.shape)
          df.columns

          結(jié)果輸出

          (10000,?14)
          Index(['RowNumber',?'CustomerId',?'Surname',?'CreditScore',?'Geography','Gender',?'Age',?'Tenure',?'Balance',?'NumOfProducts',?'HasCrCard','IsActiveMember',?'EstimatedSalary',?'Exited'],dtype='object')

          1.刪除列

          df.drop(['RowNumber',?'CustomerId',?'Surname',?'CreditScore'],?axis=1,?inplace=True)
          print(df[:2])
          print(df.shape)

          結(jié)果輸出

          ??Geography??Gender??Age??Tenure??Balance??NumOfProducts??HasCrCard??\
          0????France??Female???42???????2??????0.0??????????????1??????????1???

          ???IsActiveMember??EstimatedSalary??Exited??
          0???????????????1????????101348.88???????1??
          (10000,?10)

          說明:「axis」 參數(shù)設(shè)置為 1 以放置列,0 設(shè)置為行。「inplace=True」 參數(shù)設(shè)置為 True 以保存更改。我們減了 4 列,因此列數(shù)從 14 個(gè)減少到 10 列。

          2.選擇特定列

          我們從 csv 文件中讀取部分列數(shù)據(jù)。可以使用 usecols 參數(shù)。

          df_spec?=?pd.read_csv("Churn_Modelling.csv",?usecols=['Gender',?'Age',?'Tenure',?'Balance'])
          df_spec.head()

          3.nrows

          可以使用 nrows 參數(shù),創(chuàng)建了一個(gè)包含 csv 文件前 5000 行的數(shù)據(jù)幀。還可以使用 skiprows 參數(shù)從文件末尾選擇行。Skiprows=5000 表示我們將在讀取 csv 文件時(shí)跳過前 5000 行。

          df_partial?=?pd.read_csv("Churn_Modelling.csv",?nrows=5000)
          print(df_partial.shape)

          4.樣品

          創(chuàng)建數(shù)據(jù)框后,我們可能需要一個(gè)小樣本來測(cè)試數(shù)據(jù)。我們可以使用 n 或 frac 參數(shù)來確定樣本大小。

          df=?pd.read_csv("Churn_Modelling.csv",?usecols=['Gender',?'Age',?'Tenure',?'Balance'])
          df_sample?=?df.sample(n=1000)
          df_sample2?=?df.sample(frac=0.1)

          5.檢查缺失值

          isna 函數(shù)確定數(shù)據(jù)幀中缺失的值。通過將 isna 與 sum 函數(shù)一起使用,我們可以看到每列中缺失值的數(shù)量。

          df.isna().sum()

          6.使用 loc 和 iloc 添加缺失值

          使用 loc 和 iloc 添加缺失值,兩者區(qū)別如下:

          • loc:選擇帶標(biāo)簽
          • iloc:選擇索引

          我們首先創(chuàng)建 20 個(gè)隨機(jī)索引進(jìn)行選擇

          missing_index?=?np.random.randint(10000,?size=20)

          我們將使用 loc 將某些值更改為 np.nan(缺失值)。

          df.loc[missing_index,?['Balance','Geography']]?=?np.nan

          "Balance"和"Geography"列中缺少 20 個(gè)值。讓我們用 iloc 做另一個(gè)示例。

          df.iloc[missing_index,?-1]?=?np.nan

          7.填充缺失值

          fillna 函數(shù)用于填充缺失的值。它提供了許多選項(xiàng)。我們可以使用特定值、聚合函數(shù)(例如均值)或上一個(gè)或下一個(gè)值。

          avg?=?df['Balance'].mean()
          df['Balance'].fillna(value=avg,?inplace=True)

          fillna 函數(shù)的方法參數(shù)可用于根據(jù)列中的上一個(gè)或下一個(gè)值(例如方法="ffill")填充缺失值。它可以對(duì)順序數(shù)據(jù)(例如時(shí)間序列)非常有用。

          8.刪除缺失值

          處理缺失值的另一個(gè)方法是刪除它們。以下代碼將刪除具有任何缺失值的行。

          df.dropna(axis=0,?how='any',?inplace=True)

          9.根據(jù)條件選擇行

          在某些情況下,我們需要適合某些條件的觀測(cè)值(即行)

          france_churn?=?df[(df.Geography?==?'France')?&?(df.Exited?==?1)]
          france_churn.Geography.value_counts()

          10.用查詢描述條件

          查詢函數(shù)提供了一種更靈活的傳遞條件的方法。我們可以用字符串來描述它們。

          df2?=?df.query('80000?)
          #?讓我們通過繪制平衡列的直方圖來確認(rèn)結(jié)果。
          df2['Balance'].plot(kind='hist',?figsize=(8,5))

          11.用 isin 描述條件

          條件可能有多個(gè)值。在這種情況下,最好使用 isin 方法,而不是單獨(dú)編寫值。

          df[df['Tenure'].isin([4,6,9,10])][:3]
          結(jié)果

          12.Groupby 函數(shù)

          Pandas Groupby 函數(shù)是一個(gè)多功能且易于使用的功能,可幫助獲取數(shù)據(jù)概述。它使瀏覽數(shù)據(jù)集和揭示變量之間的基本關(guān)系更加容易。

          我們將做幾個(gè)組比函數(shù)的示例。讓我們從簡(jiǎn)單的開始。以下代碼將基于 Geography、Gender 組合對(duì)行進(jìn)行分組,然后給出每個(gè)組的平均流失率。

          df[['Geography','Gender','Exited']].groupby(['Geography','Gender']).mean()

          13.Groupby與聚合函數(shù)結(jié)合

          agg 函數(shù)允許在組上應(yīng)用多個(gè)聚合函數(shù),函數(shù)的列表作為參數(shù)傳遞。

          df[['Geography','Gender','Exited']].groupby(['Geography','Gender']).agg(['mean','count'])

          14.對(duì)不同的群體應(yīng)用不同的聚合函數(shù)

          df_summary?=?df[['Geography','Exited','Balance']].groupby('Geography').agg({'Exited':'sum',?'Balance':'mean'})
          df_summary.rename(columns={'Exited':'#?of?churned?customers',?'Balance':'Average?Balance?of?Customers'},inplace=True)

          此外,「NamedAgg 函數(shù)」允許重命名聚合中的列

          import?pandas?as?pd
          df_summary?=?df[['Geography','Exited','Balance']].groupby('Geography').agg(Number_of_churned_customers?=?pd.NamedAgg('Exited',?'sum'),Average_balance_of_customers?=?pd.NamedAgg('Balance',?'mean'))
          print(df_summary)
          結(jié)果

          15.重置索引

          您是否已經(jīng)注意到上圖的數(shù)據(jù)格式了。我們可以通過重置索引來更改它。

          print(df_summary.reset_index())
          結(jié)果

          16.重置并刪除原索引

          在某些情況下,我們需要重置索引并同時(shí)刪除原始索引。

          df[['Geography','Exited','Balance']].sample(n=6).reset_index(drop=True)

          17.將特定列設(shè)置為索引

          我們可以將數(shù)據(jù)幀中的任何列設(shè)置為索引。

          df_new.set_index('Geography')

          18.插入新列

          group?=?np.random.randint(10,?size=6)
          df_new['Group']?=?group

          19.where 函數(shù)

          它用于根據(jù)條件替換行或列中的值。默認(rèn)替換值為 NaN,但我們也可以指定要作為替換值。

          df_new['Balance']?=?df_new['Balance'].where(df_new['Group']?>=?6,?0)

          20.等級(jí)函數(shù)

          等級(jí)函數(shù)為值分配一個(gè)排名。讓我們創(chuàng)建一個(gè)列,根據(jù)客戶的余額對(duì)客戶進(jìn)行排名。

          df_new['rank']?=?df_new['Balance'].rank(method='first',?ascending=False).astype('int')

          21.列中的唯一值數(shù)

          它使用分類變量時(shí)派上用場(chǎng)。我們可能需要檢查唯一類別的數(shù)量。我們可以檢查值計(jì)數(shù)函數(shù)返回的序列的大小或使用 nunique 函數(shù)。

          df.Geography.nunique

          22.內(nèi)存使用情況

          使用函數(shù) memory_usage,這些值顯示以字節(jié)為單位的內(nèi)存.

          df.memory_usage()
          結(jié)果

          23.數(shù)據(jù)類型轉(zhuǎn)換

          默認(rèn)情況下,分類數(shù)據(jù)與對(duì)象數(shù)據(jù)類型一起存儲(chǔ)。但是,它可能會(huì)導(dǎo)致不必要的內(nèi)存使用,尤其是當(dāng)分類變量具有較低的基數(shù)。

          低基數(shù)意味著列與行數(shù)相比幾乎沒有唯一值。例如,地理列具有 3 個(gè)唯一值和 10000 行。

          我們可以通過將其數(shù)據(jù)類型更改為"類別"來節(jié)省內(nèi)存。

          df['Geography']?=?df['Geography'].astype('category')

          24.替換值

          替換函數(shù)可用于替換數(shù)據(jù)幀中的值。

          df['Geography'].replace({0:'B1',1:'B2'})

          25.繪制直方圖

          pandas 不是一個(gè)數(shù)據(jù)可視化庫(kù),但它使得創(chuàng)建基本繪圖變得非常簡(jiǎn)單。

          我發(fā)現(xiàn)使用 Pandas 創(chuàng)建基本繪圖更容易,而不是使用其他數(shù)據(jù)可視化庫(kù)。

          讓我們創(chuàng)建平衡列的直方圖。

          結(jié)果

          26.減少浮點(diǎn)數(shù)小數(shù)點(diǎn)

          pandas 可能會(huì)為浮點(diǎn)數(shù)顯示過多的小數(shù)點(diǎn)。我們可以輕松地調(diào)整它。

          df['Balance'].plot(kind='hist',?figsize=(10,6),?
          title='Customer?Balance')

          27.更改顯示選項(xiàng)

          我們可以更改各種參數(shù)的默認(rèn)顯示選項(xiàng),而不是每次手動(dòng)調(diào)整顯示選項(xiàng)。

          • get_option:返回當(dāng)前選項(xiàng)
          • set_option:更改選項(xiàng) 讓我們將小數(shù)點(diǎn)的顯示選項(xiàng)更改為 2。
          pd.set_option("display.precision",?2)

          可能要更改的一些其他選項(xiàng)包括:

          • max_colwidth:列中顯示的最大字符數(shù)
          • max_columns:要顯示的最大列數(shù)
          • max_rows:要顯示的最大行數(shù)

          28.通過列計(jì)算百分比變化

          pct_change用于計(jì)算序列中值的變化百分比。在計(jì)算時(shí)間序列或元素順序數(shù)組中更改的百分比時(shí),它很有用。

          ser=?pd.Series([2,4,5,6,72,4,6,72])
          ser.pct_change()

          29.基于字符串的篩選

          我們可能需要根據(jù)文本數(shù)據(jù)(如客戶名稱)篩選觀測(cè)值(行)。我已經(jīng)在數(shù)據(jù)幀中添加了df_new名稱。

          df_new[df_new.Names.str.startswith('Mi')]
          結(jié)果

          30.設(shè)置數(shù)據(jù)幀樣式

          我們可以通過使用返回 Style 對(duì)象的 Style 屬性來實(shí)現(xiàn)此目的,它提供了許多用于格式化和顯示數(shù)據(jù)框的選項(xiàng)。例如,我們可以突出顯示最小值或最大值。

          它還允許應(yīng)用自定義樣式函數(shù)。

          df_new.style.highlight_max(axis=0,?color='darkgreen')
          結(jié)果

          推薦閱讀

          1. 朝陽群眾舉報(bào)阿里996造成交通嚴(yán)重堵塞!

          2. 發(fā)現(xiàn)一款好用到爆的數(shù)據(jù)庫(kù)工具,被驚艷到了!

          3. Win11 神優(yōu)化!CPU、內(nèi)存占用暴降,速度傻快讓人秒棄 Win10

          4. 新華社公布新增57個(gè)禁用詞,三思而后言


          分享

          收藏

          點(diǎn)贊

          在看

          瀏覽 33
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

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

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          <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>
                  成人黄色视频网站 | 香蕉视频伊人 | 色哟哟一区二区三区四区 | 亚洲免费国产 | 国产免费操逼视频 |