您好,登錄后才能下訂單哦!
Python函數(shù)加速數(shù)據(jù)分析處理速度的示例分析,很多新手對此不是很清楚,為了幫助大家解決這個難題,下面小編將為大家詳細講解,有這方面需求的人可以來學習下,希望你能有所收獲。
前言:
Pandas
是 Python
中最廣泛使用的數(shù)據(jù)分析和操作庫。它提供了許多功能和方法,可以加快 「數(shù)據(jù)分析」 和 「預處理」 步驟。
為了更好的學習 Python
,我將以客戶流失數(shù)據(jù)集為例,分享在數(shù)據(jù)分析過程中最常使用的函數(shù)和方法。
數(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')
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 1IsActiveMember EstimatedSalary Exited
0 1 101348.88 1
(10000, 10)
說明:「axis」 參數(shù)設置為 1 以放置列,0 設置為行。「inplace=True」 參數(shù)設置為 True 以保存更改。我們減了 4 列,因此列數(shù)從 14 個減少到 10 列。
我們從 csv 文件中讀取部分列數(shù)據(jù)??梢允褂?usecols
參數(shù)。
df_spec = pd.read_csv("Churn_Modelling.csv", usecols=['Gender', 'Age', 'Tenure', 'Balance']) df_spec.head()
可以使用 nrows
參數(shù),創(chuàng)建了一個包含 csv 文件前 5000 行的數(shù)據(jù)幀。還可以使用 skiprows
參數(shù)從文件末尾選擇行。Skiprows=5000
表示我們將在讀取 csv 文件時跳過前 5000 行。
df_partial = pd.read_csv("Churn_Modelling.csv", nrows=5000) print(df_partial.shape)
創(chuàng)建數(shù)據(jù)框后,我們可能需要一個小樣本來測試數(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)
isna
函數(shù)確定數(shù)據(jù)幀中缺失的值。通過將 isna
與 sum
函數(shù)一起使用,我們可以看到每列中缺失值的數(shù)量。
df.isna().sum()
使用 loc 和 iloc 添加缺失值,兩者區(qū)別如下:
loc
:選擇帶標簽
iloc
:選擇索引
我們首先創(chuàng)建 20 個隨機索引進行選擇
missing_index = np.random.randint(10000, size=20)
我們將使用 loc
將某些值更改為 np.nan
(缺失值)。
df.loc[missing_index, ['Balance','Geography']] = np.nan
"Balance
"和"Geography
"列中缺少 20 個值。讓我們用 iloc 做另一個示例。
df.iloc[missing_index, -1] = np.nan
fillna
函數(shù)用于填充缺失的值。它提供了許多選項。我們可以使用特定值、聚合函數(shù)(例如均值)或上一個或下一個值。
avg = df['Balance'].mean() df['Balance'].fillna(value=avg, inplace=True)
fillna
函數(shù)的方法參數(shù)可用于根據(jù)列中的上一個或下一個值(例如方法="ffill
")填充缺失值。它可以對順序數(shù)據(jù)(例如時間序列)非常有用。
處理缺失值的另一個方法是刪除它們。以下代碼將刪除具有任何缺失值的行。
df.dropna(axis=0, how='any', inplace=True)
在某些情況下,我們需要適合某些條件的觀測值(即行)
france_churn = df[(df.Geography == 'France') & (df.Exited == 1)] france_churn.Geography.value_counts()
查詢函數(shù)提供了一種更靈活的傳遞條件的方法。我們可以用字符串來描述它們。
df2 = df.query('80000 < Balance < 100000') # 讓我們通過繪制平衡列的直方圖來確認結(jié)果。 df2['Balance'].plot(kind='hist', figsize=(8,5))
條件可能有多個值。在這種情況下,最好使用 isin
方法,而不是單獨編寫值。
df[df['Tenure'].isin([4,6,9,10])][:3]
Pandas Groupby
函數(shù)是一個多功能且易于使用的功能,可幫助獲取數(shù)據(jù)概述。它使瀏覽數(shù)據(jù)集和揭示變量之間的基本關(guān)系更加容易。
我們將做幾個組比函數(shù)的示例。讓我們從簡單的開始。以下代碼將基于 Geography
、Gender
組合對行進行分組,然后給出每個組的平均流失率。
df[['Geography','Gender','Exited']].groupby(['Geography','Gender']).mean()
agg
函數(shù)允許在組上應用多個聚合函數(shù),函數(shù)的列表作為參數(shù)傳遞。
df[['Geography','Gender','Exited']].groupby(['Geography','Gender']).agg(['mean','count'])
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)
您是否已經(jīng)注意到上圖的數(shù)據(jù)格式了。我們可以通過重置索引來更改它。
print(df_summary.reset_index())
圖片
在某些情況下,我們需要重置索引并同時刪除原始索引。
df[['Geography','Exited','Balance']].sample(n=6).reset_index(drop=True)
我們可以將數(shù)據(jù)幀中的任何列設置為索引。
df_new.set_index('Geography')
group = np.random.randint(10, size=6) df_new['Group'] = group
它用于根據(jù)條件替換行或列中的值。默認替換值為 NaN
,但我們也可以指定要作為替換值。
df_new['Balance'] = df_new['Balance'].where(df_new['Group'] >= 6, 0)
等級函數(shù)為值分配一個排名。讓我們創(chuàng)建一個列,根據(jù)客戶的余額對客戶進行排名。
df_new['rank'] = df_new['Balance'].rank(method='first', ascending=False).astype('int')
它使用分類變量時派上用場。我們可能需要檢查唯一類別的數(shù)量。我們可以檢查值計數(shù)函數(shù)返回的序列的大小或使用 nunique
函數(shù)。
df.Geography.nunique
使用函數(shù) memory_usage
,這些值顯示以字節(jié)為單位的內(nèi)存.
df.memory_usage()
默認情況下,分類數(shù)據(jù)與對象數(shù)據(jù)類型一起存儲。但是,它可能會導致不必要的內(nèi)存使用,尤其是當分類變量具有較低的基數(shù)。
低基數(shù)意味著列與行數(shù)相比幾乎沒有唯一值。例如,地理列具有 3 個唯一值和 10000 行。
我們可以通過將其數(shù)據(jù)類型更改為"類別"來節(jié)省內(nèi)存。
df['Geography'] = df['Geography'].astype('category')
替換函數(shù)可用于替換數(shù)據(jù)幀中的值。
df['Geography'].replace({0:'B1',1:'B2'})
pandas
不是一個數(shù)據(jù)可視化庫,但它使得創(chuàng)建基本繪圖變得非常簡單。
我發(fā)現(xiàn)使用 Pandas
創(chuàng)建基本繪圖更容易,而不是使用其他數(shù)據(jù)可視化庫。
讓我們創(chuàng)建平衡列的直方圖。
pandas
可能會為浮點數(shù)顯示過多的小數(shù)點。我們可以輕松地調(diào)整它。
df['Balance'].plot(kind='hist', figsize=(10,6), title='Customer Balance')
我們可以更改各種參數(shù)的默認顯示選項,而不是每次手動調(diào)整顯示選項。
get_option
:返回當前選項
set_option
:更改選項 讓我們將小數(shù)點的顯示選項更改為 2。
pd.set_option("display.precision", 2)
可能要更改的一些其他選項包括:
max_colwidth
:列中顯示的最大字符數(shù)
max_columns
:要顯示的最大列數(shù)
max_rows
:要顯示的最大行數(shù)
pct_change
用于計算序列中值的變化百分比。在計算時間序列或元素順序數(shù)組中更改的百分比時,它很有用。
ser= pd.Series([2,4,5,6,72,4,6,72]) ser.pct_change()
我們可能需要根據(jù)文本數(shù)據(jù)(如客戶名稱)篩選觀測值(行)。我已經(jīng)在數(shù)據(jù)幀中添加了df_new
名稱。
df_new[df_new.Names.str.startswith('Mi')]
我們可以通過使用返回 Style
對象的 Style 屬性來實現(xiàn)此目的,它提供了許多用于格式化和顯示數(shù)據(jù)框的選項。例如,我們可以突出顯示最小值或最大值。
它還允許應用自定義樣式函數(shù)。
df_new.style.highlight_max(axis=0, color='darkgreen')
看完上述內(nèi)容是否對您有幫助呢?如果還想對相關(guān)知識有進一步的了解或閱讀更多相關(guān)文章,請關(guān)注億速云行業(yè)資訊頻道,感謝您對億速云的支持。
免責聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。