基于索引过滤 Pandas DataFrame


NumPy 为 Python 包 Pandas 提供了高性能的数据操作和分析功能,它是 Pandas 的基础。它引入了 Series 和 DataFrame 数据结构。Series 是一个一维的带标签数组,可以存储任何类型的数据。它类似于数据库表或电子表格中的一列。Series 对象是带标签的,这意味着每个成员都有一个关联的索引,这使得数据访问和操作快速简便。

DataFrame 类似于电子表格或 SQL 表,是一个由行和列组成的二维表格数据结构。它是一组 Series 对象的集合,并提供了强大的方法来进行数据处理、过滤、分组、连接以及许多其他操作。通过加载来自各种文件格式(如 CSV 或 Excel)的数据,您可以使用 Pandas 轻松执行数据清洗、探索和分析。

filter() 提供了一种通过索引过滤 DataFrame 的有用方法,允许根据提供的索引中关联的标签专门选择子集的行和列。过滤后,filter() 将生成一个包含过滤结果的新 DataFrame。

语法

df.filter(items=None, like=None, regex=None, axis=None)

items:此函数允许将包含这些标签的列表状对象作为参数输入。因此,无论有多少个标签,只会返回名称匹配的行和列。

like (可选):使用此参数,您可以根据字符串值过滤索引标签或列。结果将只包含名称包含所提供字符串的列或行。

regex (可选):您可以使用正则表达式模式,通过 regex (可选) 参数选择列或索引标签。它根据指定的正则表达式过滤列或行。

axis (可选):可选参数 axis 决定是过滤行 (axis = 0) 还是列 (axis = 1)。因为它通常设置为 None,所以过滤是在列上进行的。

示例 1

一个示例,演示如何使用 pandas 中的 iloc() 函数根据数值索引过滤 DataFrame。

import pandas as pd

# Create a sample DataFrame
data = {'A': [1, 2, 3, 4, 5],
    'B': [6, 7, 8, 9, 10],
    'C': [11, 12, 13, 14, 15]}
df = pd.DataFrame(data)

# Filter rows based on numeric value indexes
filtered_df = df.iloc[[1, 3]]

print(filtered_df)

输出

   A  B   C
1  2  7  12
3  4  9  14

为了根据数值索引 [1, 3] 有效地过滤行,我们使用 filter 函数。我们将在 df DataFrame 的三个相关列上使用它:'A'、'B' 和 'C'。因此,过滤后的 DataFrame filtered_df 只包含索引为 1 和 3 的行,但保留所有其他列。

示例 2

一个示例,演示如何根据非数值值过滤 DataFrame。

import pandas as pd

# Create a sample DataFrame
data = {'A': [1, 2, 3, 4, 5],
    'B': [6, 7, 8, 9, 10],
    'C': [11, 12, 13, 14, 15]}
df = pd.DataFrame(data)

# Create a mapping dictionary for index label conversion
index_mapping = {1: 'two', 3: 'four'}

# Filter rows based on numeric value indexes and update index labels
filtered_df = df.iloc[[1, 3]].rename(index=index_mapping)

print(filtered_df)

输出

      A  B   C
two   2  7  12
four  4  9  14

在这里,我们使用 filter() 方法根据非数值索引 ["two", "four"] 过滤行。过滤后的 DataFrame 保留所有列,结果只包含索引为 "two" 和 "four" 的行。

示例 3

在这里,我们演示如何过滤 DataFrame 并提取包含特定字符的索引。

import pandas as pd

# Create a sample DataFrame
sample_data = {'A': [1, 2, 3, 4, 5],
    'B': [6, 7, 8, 9, 10],
    'C': [11, 12, 13, 14, 15]}
df = pd.DataFrame(sample_data, index=['apple', 'banana', 'orange', 'grape', 'kiwi'])

# Filter rows based on indexes containing a specific character
filtered_df = df[df.index.str.contains('a')]

print(filtered_df)

输出

        A  B   C
apple   1  6  11
banana  2  7  12
orange  3  8  13
grape   4  9  14

DataFrame 的列为 'A'、'B' 和 'C',其索引为 "Apple"、"Banana"、"Orange"、"Grape" 和 "Kiwi"。为了确定每个索引是否包含字母 "a",我们使用 contains() 方法。然后使用此布尔条件来过滤 DataFrame 的行。

结论

在进行数据分析和操作活动时,根据索引值过滤 DataFrame 至关重要。在处理大型数据集时,它使我们能够灵活有效地提取相关的数据子集以进行进一步的分析或处理。

更新于:2023年8月10日

338 次浏览

启动你的职业生涯

完成课程获得认证

开始学习
广告