三十個 Python 函數,解決99%的資料處理任務!

WBOY
發布: 2023-04-15 10:07:02
轉載
973 人瀏覽過

三十個 Python 函數,解決99%的資料處理任務!

我們知道 Pandas 是 Python 中最廣泛使用的資料分析和操作函式庫。它提供了許多功能和方法,可以快速解決資料分析中資料處理問題。

為了更好的掌握 Python 函數的使用方法,我以客戶流失資料集為例,分享30個在資料分析過程中最常使用的函數和方法,資料文末可以下載。

資料如下所示:

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

登入後複製

結果輸出

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

登入後複製

結果輸出

說明:「axis ” 參數設定為1 以放置列,0 設定為行。 “inplace=True” 參數設定為 True 以儲存變更。我們減了 4 列,因此列數從 14 個減少到 10 列。

GeographyGenderAgeTenureBalanceNumOfProductsHasCrCard
0FranceFemale 42 20.011
 IsActiveMemberEstimatedSalaryExited
0 1101348.88 1
(10000, 10)

登入後複製

2.選擇特定欄位

我們從 csv 檔案讀取部分列資料。可以使用 usecols 參數。

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

登入後複製

3.nrows

可以使用 nrows 參數,建立了一個包含 csv 檔案前 5000 行的資料幀。也可以使用 skiprows 參數從檔案結尾選擇行。 Skiprows=5000 表示我們將在讀取 csv 檔案時跳過前 5000 行。

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

登入後複製

4.樣品

建立資料框後,我們可能需要一個小樣本來測試資料。我們可以使用 n 或 frac 參數來決定樣本大小。

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 函數決定資料幀中缺少的值。透過將 isna 與 sum 函數一起使用,我們可以看到每個欄位中缺失值的數量。

df.isna().sum()

登入後複製

6.使用loc 和iloc 新增缺失值

使用loc 和iloc 新增缺失值,兩者差異如下:

    ## loc:選擇帶標籤
  • iloc:選擇索引
我們先建立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

登入後複製

7.填入缺失值

fillna 函數用來填入缺少的值。它提供了許多選項。我們可以使用特定值、聚合函數(例如平均值)或上一個或下一個值。

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

登入後複製

fillna 函數的方法參數可用於根據列中的上一個或下一個值(例如方法="ffill")填入缺失值。它可以對順序資料(例如時間序列)非常有用。

8.刪除缺失值

處理缺失值的另一個方法是刪除它們。以下程式碼將刪除具有任何缺失值的行。

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

登入後複製

9.根據條件選擇行

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

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

登入後複製

10.用查詢描述條件

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

df2 = df.query('80000 < Balance < 100000')
df2 = df.query('80000 < Balance < 100000'
df2 = df.query('80000 < Balance < 100000')

登入後複製

11.用 isin 描述條件

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

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

登入後複製

三十個 Python 函數,解決99%的資料處理任務!

12.Groupby 函數

Pandas Groupby 函數是一個多功能且易於使用的功能,可協助取得資料概述。它使瀏覽資料集和揭示變數之間的基本關係更加容易。

我們將做幾個組比函數的範例。讓我們從簡單的開始。以下程式碼將基於Geography、Gender 組合對行進行分組,然後給出每個組的平均流

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

登入後複製

13.Groupby與聚合函數結合

agg 函數允許在組上應用多個個聚合函數,函數的列表作為參數傳遞。

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

登入後複製

14.對不同的群體應用不同的聚合函數

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 函數」允許重新命名聚合中的欄位

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)

登入後複製

三十個 Python 函數,解決99%的資料處理任務!

#15.重置索引

您是否已經注意到上圖的資料格式了。我們可以透過重置索引來更改它。

print(df_summary.reset_index())

登入後複製

三十個 Python 函數,解決99%的資料處理任務!

16.重設並刪除原始索引

#在某些情況下,我們需要重設索引並同時刪除原始索引。

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

登入後複製

17.將特定列設定為索引

我們可以將資料幀中的任何列設定為索引。

df_new.set_index('Geography')

登入後複製

18.插入新列

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

登入後複製

19.where 函數

它用於根據條件取代行或列中的值。預設替換值為 NaN,但我們也可以指定要作為替換值。

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

登入後複製

20.等級函數

等級函數為值分配一個排名。讓我們建立一個列,根據客戶的餘額對客戶進行排名。

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

登入後複製

21.列中的唯一值數

它使用分類變數時派上用場。我們可能需要檢查唯一類別的數量。我們可以檢查值計數函數傳回的序列的大小或使用 nunique 函數。

df.Geography.nunique

登入後複製

22.記憶體使用情況

使用函數 memory_usage,這些值顯示以位元組為單位的記憶體。

df.memory_usage()

登入後複製

三十個 Python 函數,解決99%的資料處理任務!

23.数据类型转换

默认情况下,分类数据与对象数据类型一起存储。但是,它可能会导致不必要的内存使用,尤其是当分类变量具有较低的基数。

低基数意味着列与行数相比几乎没有唯一值。例如,地理列具有 3 个唯一值和 10000 行。

我们可以通过将其数据类型更改为"类别"来节省内存。

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

登入後複製

24.替换值

替换函数可用于替换数据帧中的值。

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

登入後複製

25.绘制直方图

pandas 不是一个数据可视化库,但它使得创建基本绘图变得非常简单。

我发现使用 Pandas 创建基本绘图更容易,而不是使用其他数据可视化库。

让我们创建平衡列的直方图。

三十個 Python 函數,解決99%的資料處理任務!

26.减少浮点数小数点

pandas 可能会为浮点数显示过多的小数点。我们可以轻松地调整它。

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

登入後複製

27.更改显示选项

我们可以更改各种参数的默认显示选项,而不是每次手动调整显示选项。

  • get_option:返回当前选项
  • set_option:更改选项 让我们将小数点的显示选项更改为 2。
pd.set_option("display.precision", 2)

登入後複製

可能要更改的一些其他选项包括:

  • max_colwidth:列中显示的最大字符数
  • max_columns:要显示的最大列数
  • max_rows:要显示的最大行数

28.通过列计算百分比变化

pct_change用于计算序列中值的变化百分比。在计算时间序列或元素顺序数组中更改的百分比时,它很有用。

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

登入後複製

29.基于字符串的筛选

我们可能需要根据文本数据(如客户名称)筛选观测值(行)。我已经在数据帧中添加了df_new名称。

三十個 Python 函數,解決99%的資料處理任務!

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

登入後複製

我们可能需要根据文本数据(如客户名称)筛选观测值(行)。我已经在数据帧中添加了df_new名称。

三十個 Python 函數,解決99%的資料處理任務!

30.设置数据样式

我们可以通过使用返回 Style 对象的 Style 属性来实现此目的,它提供了许多用于格式化和显示数据框的选项。例如,我们可以突出显示最小值或最大值。

它还允许应用自定义样式函数。

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

登入後複製

三十個 Python 函數,解決99%的資料處理任務!

以上是三十個 Python 函數,解決99%的資料處理任務!的詳細內容。更多資訊請關注PHP中文網其他相關文章!

相關標籤:
來源:51cto.com
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板