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