Pandas Masking

Preet Sanghavi 2023年1月30日
  1. 在 Pandas 中使用 dates_data 建立一個虛擬 DataFrame
  2. 使用 Masking 過濾 Pandas 中的資料
Pandas Masking

Pandas 是 Python 中的高階資料分析工具或包擴充套件。許多公司和組織需要高質量的資料分析才能大規模使用此工具。

資料分析師必須根據資料型別決定是否使用 pandas。當我們在 SQL 表、電子表格或異構列中有資料時,強烈建議使用 Pandas。

資料可以有序也可以無序,還支援時序資料。在本教程中,讓我們瞭解如何在 pandas 中遮蔽資料。

遮蔽本質上是一種基於一個或多個條件過濾資料的方法。此掩碼的輸出通常是一個物件,該物件根據條件返回為 truefalse

在 Pandas 中使用 dates_data 建立一個虛擬 DataFrame

它可以理解為 DataFrame 的高階 If-Else 方案。但是,我們將首先使用 dates_data 建立一個虛擬 DataFrame 以及幾行。

import pandas as pd

index = pd.date_range("2013-1-1", periods=100, freq="30Min")
dates_data = pd.DataFrame(data=list(range(100)), columns=["value"], index=index)
dates_data["value2"] = "Alpha"
dates_data["value2"].loc[0:10] = "Beta"

程式碼塊建立一個 DataFrame,其中包含日期的行和名為 valuevalue2 的兩列。要檢視資料中的條目,我們使用以下程式碼:

print(dates_data)

輸出:

                     value value2
2013-01-01 00:00:00      0   Beta
2013-01-01 00:30:00      1   Beta
2013-01-01 01:00:00      2   Beta
2013-01-01 01:30:00      3   Beta
2013-01-01 02:00:00      4   Beta
...                    ...    ...
2013-01-02 23:30:00     95  Alpha
2013-01-03 00:00:00     96  Alpha
2013-01-03 00:30:00     97  Alpha
2013-01-03 01:00:00     98  Alpha
2013-01-03 01:30:00     99  Alpha

正如我們所看到的,我們有 100 個不同的條目,每個條目在 30 分鐘的間隔後設定的時間相同。

建立了兩個名為 valuevalue2 的附加列,其中我們將一些值設定為數字,而將其他值設定為 AlphaBeta

使用 Masking 過濾 Pandas 中的資料

遮蔽是 Pandas 中的一個高階概念,分析師試圖根據特定條件過濾資料。

可以根據一個或多個條件過濾此資料。我們將嘗試在這裡詳細探討這些案例中的每一個。

讓我們從過濾資料開始,這樣我們只希望從我們的 DataFramedates_data 中獲取條目。

mask = dates_data["value2"] == "Beta"
print(dates_data[mask])

輸出:

                     value value2
2013-01-01 00:00:00      0   Beta
2013-01-01 00:30:00      1   Beta
2013-01-01 01:00:00      2   Beta
2013-01-01 01:30:00      3   Beta
2013-01-01 02:00:00      4   Beta
2013-01-01 02:30:00      5   Beta
2013-01-01 03:00:00      6   Beta
2013-01-01 03:30:00      7   Beta
2013-01-01 04:00:00      8   Beta
2013-01-01 04:30:00      9   Beta

我們在 dates_data DataFrame 的 value2 列中有僅與 Beta 值相關的條目。

通過這種方式,我們可以建立一個掩碼,然後將該掩碼疊加在我們的資料上以過濾資料。這個掩碼也可以理解為過濾掉某些資料的模板。

我們將從 value 列中過濾具有特定範圍值的資料,並且僅從 dates_data DataFrame 中的 value2 列中過濾 Beta 值。

mask = (dates_data["value2"] == "Beta") & (dates_data["value"] > 3)
print(dates_data[mask])

輸出:

                     value value2
2013-01-01 02:00:00      4   Beta
2013-01-01 02:30:00      5   Beta
2013-01-01 03:00:00      6   Beta
2013-01-01 03:30:00      7   Beta
2013-01-01 04:00:00      8   Beta
2013-01-01 04:30:00      9   Beta

正如我們在上面的程式碼塊中看到的那樣,我們已經成功過濾了資料,因此我們在 value 列中只有大於 3 的值,而在 value2 列中只有值 Beta

因此,藉助 Pandas 中的 Masking 技術,我們可以根據我們的要求並基於一個或多個條件有效地過濾資料。

作者: Preet Sanghavi
Preet Sanghavi avatar Preet Sanghavi avatar

Preet writes his thoughts about programming in a simplified manner to help others learn better. With thorough research, his articles offer descriptive and easy to understand solutions.

LinkedIn GitHub