<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 個小例子幫你快速掌握Pandas

          共 2853字,需瀏覽 6分鐘

           ·

          2020-11-27 19:17

          ↑↑↑點擊上方藍字,回復(fù)資料,10個G的驚喜

          作者:Soner Y?ld?r?m

          鏈接:https://towardsdatascience.com/30-examples-to-master-pandas-f8a2da751fa4



          Pandas是Python最知名的數(shù)據(jù)分析和處理庫。它提供了許多的函數(shù)和方法,可加快數(shù)據(jù)分析和預(yù)處理步驟。今天介紹的這些示例將涵蓋您可能在典型的數(shù)據(jù)分析過程中使用的幾乎所有函數(shù)和方法。

          讀取數(shù)據(jù)集

          本次演示使用Kaggle上提供的客戶流失數(shù)據(jù)集[1]。

          讓我們從將csv文件讀取到pandas DataFrame開始。

          import?numpy?as?np
          import?pandas?as?pd
          df?=?pd.read_csv("/data/churn.csv")
          df.shape
          ---
          (10000,14)
          df.columns
          ---
          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)

          df.shape
          ---
          (10000,10)

          axis參數(shù)設(shè)置為1表示刪除列,0表示行。inplace參數(shù)設(shè)置為True以保存更改。我們刪除了4列,因此列數(shù)從14減少到10。

          2.讀取時選擇特定的列

          我們只打算讀取csv文件中的某些列。讀取時,列列表將傳遞給usecols參數(shù)。如果您事先知道列名,則比以后刪除更好。

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

          選擇特定的列

          3.讀取DataFrame的一部分行

          read_csv函數(shù)允許按行讀取DataFrame的一部分。有兩種選擇。第一個是讀取前n行。

          df_partial?=?pd.read_csv("/data/churn.csv",
          nrows=500)

          df_partial.shape
          ---
          (500,14)

          使用nrows參數(shù),我們創(chuàng)建了一個包含csv文件的前500行的DataFrame。

          我們還可以使用skiprows參數(shù)從文件末尾選擇行。Skiprows = 5000表示在讀取csv文件時我們將跳過前5000行。

          也可以把nrowsskiprows結(jié)合使用,就相當于MySQL里的limit 500 offset 5000

          4.抽樣

          創(chuàng)建DataFrame后,我們可能希望抽取一個小樣本以便于進行工作。我們可以使用n參數(shù)或frac參數(shù)來確定樣本大小。

          • n:樣本中的行數(shù)
          • frac:樣本大小與整個DataFrame大小的比率
          df_sample?=?df.sample(n=1000)??
          df_sample.shape??
          (1000,10)df_sample2?=?df.sample(frac=0.1)??
          df_sample2.shape
          ---
          (1000,10)

          5.缺失值檢查

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

          df.isna().sum()

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

          我正在做這個例子來練習(xí)lociloc。這些方法根據(jù)索引或標簽選擇行和列。

          • loc:帶標簽選擇
          • iloc:用索引選擇

          先創(chuàng)建20個隨機indices。

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

          接下來將某些值更改為np.nan(缺失值)。

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

          BalanceGeography列中缺少20個值。讓我們做另一個使用索引而不是標簽的示例。

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

          "-1"是最后一列Exit的索引。

          盡管我們對lociloc使用了不同的列表示形式,但行值沒有改變。原因是我們使用數(shù)字索引標簽。因此,行的標簽和索引都相同。

          缺失值的數(shù)量已更改:

          7.填充缺失值

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

          對于Geography列,我將使用最常見的值。

          mode?=?df['Geography'].value_counts().index[0]??
          df['Geography'].fillna(value=mode,?inplace=True)

          同樣,對于Balance列,我將使用列的均值替換缺失值。

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

          fillna函數(shù)的method參數(shù)可用于根據(jù)列中的上一個或下一個值填充缺失值(例如method ='ffill')。這對于順序數(shù)據(jù)(例如時間序列)非常有用。

          8.刪除缺失值

          處理缺失值的另一種方法是刪除它們?!耙淹顺觥绷兄腥匀鄙僦?。以下代碼將刪除缺少任何值的行。

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

          axis = 1用于刪除缺少值的列。我們還可以為列或行具有的非缺失值的數(shù)量設(shè)置閾值。例如,thresh = 5表示一行必須具有至少5個不可丟失的非丟失值。缺失值小于或等于4的行將被刪除。

          DataFrame現(xiàn)在沒有任何缺失值。

          df.isna().sum().sum()
          ---
          0

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

          在某些情況下,我們需要適合某些條件的觀察值(即行)。例如,下面的代碼將選擇居住在法國并且已經(jīng)流失的客戶。

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

          france_churn.Geography.value_counts()??
          ---
          France????808

          10.用查詢描述條件

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

          df2?=?df.query('80000?)

          讓我們通過繪制Balance列的直方圖來確認結(jié)果。

          df2['Balance'].plot(kind='hist',?figsize=(8,5))

          Balance hist

          11.用isin描述條件

          條件可能有幾個值。在這種情況下,最好使用isin方法,而不是單獨寫入值。

          我們只傳遞期望值的列表。

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

          12.groupby函數(shù)

          Pandas Groupby函數(shù)是一種通用且易于使用的函數(shù),有助于獲得數(shù)據(jù)概覽。它使探索數(shù)據(jù)集和揭示變量之間的潛在關(guān)系變得更加容易。

          我們將為groupby函數(shù)寫幾個例子。讓我們從一個簡單的開始。下面的代碼將根據(jù)地理位置和性別的組合對行進行分組,然后為我們提供每組的平均流失率。

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

          13.通過groupby應(yīng)用多個聚合函數(shù)

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

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

          我們可以看到每組中觀察值(行)的數(shù)量和平均流失率。

          14.將不同的匯總函數(shù)應(yīng)用于不同的組

          我們不必對所有列都應(yīng)用相同的函數(shù)。例如,我們可能希望查看每個國家/地區(qū)的平均余額和流失的客戶總數(shù)。

          我們將傳遞一個字典,該字典指示哪些函數(shù)將應(yīng)用于哪些列。

          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)

          df_summary

          我還重命名了這些列。

          NamedAgg函數(shù)允許重命名聚合中的列。語法如下:

          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')??
          )

          15.重置索引

          您可能已經(jīng)注意到,groupby返回的DataFrame的索引由組名組成。我們可以通過重置索引來更改它。

          df_new?=?df[['Geography','Exited','Balance']]\??
          .groupby(['Geography','Exited']).mean().reset_index()

          df_new

          如果我們將groupby函數(shù)的as_index參數(shù)設(shè)置為False,則組名將不會用作索引。

          16.帶刪除的重置索引

          在某些情況下,我們需要重置索引并同時刪除原始索引。考慮從DataFrame中抽取樣本的情況。該示例將保留原始DataFrame的索引,因此我們要重置它。

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

          重設(shè)索引,但原始索引保留為新列。我們可以在重置索引時將其刪除。

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

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

          我們可以將DataFrame中的任何列設(shè)置為索引。

          df_new.set_index('Geography')

          18.插入新列

          我們可以向DataFrame添加新列,如下所示:

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

          df_new

          但新列將添加在末尾。如果要將新列放在特定位置,則可以使用插入函數(shù)。

          df_new.insert(0,?'Group',?group)

          df_new

          第一個參數(shù)是位置的索引,第二個參數(shù)是列的名稱,第三個參數(shù)是值。

          19.where函數(shù)

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

          考慮上一步(df_new)中的DataFrame。我們希望將小于6的客戶的Balance設(shè)置為0。

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

          df_new

          符合指定條件的值將保持不變,而其他值將替換為指定值。

          20.排名函數(shù)

          它為這些值分配一個等級。讓我們創(chuàng)建一個根據(jù)客戶余額對客戶進行排名的列。

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

          df_new

          method參數(shù)指定如何處理具有相同值的行。first表示根據(jù)它們在數(shù)組(即列)中的順序?qū)ζ溥M行排名。

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

          使用分類變量時,它很方便。我們可能需要檢查唯一類別的數(shù)量。

          我們可以檢查由value counts函數(shù)返回的序列的大小,也可以使用nunique函數(shù)。

          22.內(nèi)存使用

          只需通過memory_usage函數(shù)即可完成。

          這些值顯示以字節(jié)為單位使用了多少內(nèi)存。

          23.分類數(shù)據(jù)類型

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

          低基數(shù)意味著與行數(shù)相比,一列具有很少的唯一值。例如,Geography列具有3個唯一值和10000行。

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

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

          Geography列的內(nèi)存消耗減少了近8倍。

          24.替換值

          替換函數(shù)可用于替換DataFrame中的值。

          第一個參數(shù)是要替換的值,第二個參數(shù)是新值。

          我們可以使用字典進行多次替換。

          25.繪制直方圖

          Pandas不是數(shù)據(jù)可視化庫,但用它創(chuàng)建一些基本圖形還是非常簡單的。

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

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

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

          由于Pandas不是數(shù)據(jù)可視化庫,因此我不想詳細介紹繪圖。但是,Pandas 繪圖[2]函數(shù)能夠創(chuàng)建許多不同的圖形,例如直線,條形圖,kde,面積,散點圖等等。

          26.減少浮點數(shù)的小數(shù)點位數(shù)

          Pandas的浮點數(shù)可能會顯示過多的小數(shù)點。我們可以使用舍入函數(shù)輕松調(diào)整它。

          df_new.round(1)#所需的小數(shù)位數(shù)

          27.更改顯示選項

          無需每次都手動調(diào)整顯示選項,我們可以更改各種參數(shù)的默認顯示選項。

          • get_option:返回當前選項是什么
          • set_option:更改選項

          讓我們將小數(shù)點的顯示選項更改為2。

          pd.set_option("display.precision",?2)

          您可能需要更改的其他一些選項是:

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

          28.計算列中的百分比變化

          pct_change用于計算一系列值中的百分比變化。在計算元素的時間序列或順序數(shù)組中的變化百分比時很有用。

          從第一元素(4)到第二元素(5)的變化為%25,因此第二個值為0.25。

          29.根據(jù)字符串過濾

          我們可能需要根據(jù)文本數(shù)據(jù)(例如客戶名稱)過濾觀察結(jié)果(行)。我已經(jīng)將虛構(gòu)名稱添加到df_new DataFrame中。

          讓我們選擇客戶名稱以Mi開頭的行。

          我們將使用str訪問器的startswith方法。

          df_new[df_new.Names.str.startswith('Mi')]

          endswith函數(shù)根據(jù)字符串末尾的字符進行相同的過濾。

          Pandas可以對字符串進行很多操作。

          30.樣式化DataFrame

          我們可以通過使用Style屬性來實現(xiàn)此目的,該屬性返回一個styler對象。它提供了許多用于格式化和顯示DataFrame的選項。例如,我們可以突出顯示最小值或最大值。

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

          df_new.style.highlight_max(axis?=?0,
          color?='darkgreen'

          參考資料

          [1]

          客戶流失數(shù)據(jù)集: https://www.kaggle.com/shubh0799/churn-modelling

          [2]

          Pandas 繪圖: https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.DataFrame.plot.html

          機器學(xué)習(xí)最好的入門課程是什么?

          勸你們不要過度迷信數(shù)據(jù)分析!

          機器學(xué)習(xí)從 入 門 到 精 通 路 線 圖

          【干貨】統(tǒng) 計 學(xué) × 數(shù) 據(jù) 分 析

          瀏覽 115
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

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

          手機掃一掃分享

          分享
          舉報
          <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>
                  97久久人国产精品婷婷 | 欧美爱爱一区 | 国产成人三级在线观看 | 人妻无码在线播放 | 在线免费超碰 |