基於索引過濾 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 次瀏覽

啟動你的職業生涯

完成課程獲得認證

開始學習
廣告
© . All rights reserved.