Pandas Series.str.extract() 方法



Pandas 中的Series.str.extract() 方法允許您從 Series 中的每個字串元素或 DataFrame 中的列中提取與指定正則表示式模式匹配的子字串。此方法對於基於正則表示式模式將字串的特定部分提取到 DataFrame 中的單獨列中特別有用。

透過使用正則表示式模式,您可以輕鬆控制提取字串的哪些部分。此方法從正則表示式模式的第一個匹配項中提取組。然後,提取的組可以作為 DataFrame 中的列返回,從而可以輕鬆處理複雜的文字資料。

語法

以下是 Pandas Series.str.extract() 方法的語法:

Series.str.extract(pat, flags=0, expand=True)

引數

Series.str.extract() 方法接受以下引數:

  • pat − 表示具有捕獲組的正則表示式模式的字串。

  • flags − 整數,預設為 0(無標誌)。可以從re 模組(例如re.IGNORECASE)使用標誌來修改正則表示式匹配。

  • expand − 布林值,預設為 True。如果為 True,則返回一個 DataFrame,每個捕獲組對應一列。如果為 False,則如果只有一個捕獲組,則返回 Series/Index,如果有多個捕獲組,則返回 DataFrame。

返回值

Series.str.extract() 方法返回 DataFrame、Series 或 Index。結果將對每個主題字串有一行,對每個組有一列。正則表示式模式中的捕獲組名稱將用於列名;否則,將使用捕獲組編號。即使找不到匹配項,每個結果列的 dtype 始終為 object。如果expand=False 並且模式只有一個捕獲組,則返回 Series 或 Index。

示例 1

在此示例中,我們透過基於正則表示式模式提取 Series 中字串的特定部分來演示 Series.str.extract() 方法的用法。

在這裡,我們使用具有命名捕獲組的正則表示式模式從 Series 中每個字串中提取字母后跟數字。

import pandas as pd
import numpy as np

# Create a Series of strings
s = pd.Series(['Python1', 'Tutorialspoint2', 'caT3', np.nan])

# Extract letter followed by a digit
result = s.str.extract(r'(?P<letter>[a-zA-Z])(?P<digit>\d)')

print("Input Series:")
print(s)
print("\nDataFrame after calling str.extract():")
print(result)

執行上述程式碼後,將產生以下輸出:

Input Series:
0           Python1
1    Tutorialspoint2
2              caT3
3               NaN
dtype: object

DataFrame after calling str.extract():
  letter digit
0      n     1
1      t     2
2      T     3
3    NaN   NaN

示例 2

在此示例中,我們演示瞭如何使用Series.str.extract() 方法基於具有多個捕獲組的正則表示式模式提取 Series 中字串的特定部分。

import pandas as pd

# Create a Series of strings
s = pd.Series(['Order123', 'Invoice456', 'Receipt789'])

# Extract 'Order', 'Invoice', or 'Receipt' followed by digits
result = s.str.extract(r'(?P<type>[A-Za-z]+)(?P<number>\d+)')

print("Input Series:")
print(s)
print("\nDataFrame after calling str.extract():")
print(result)

以下是上述程式碼的輸出:

Input Series:
0      Order123
1    Invoice456
2    Receipt789
dtype: object

DataFrame after calling str.extract():
      type number
0    Order    123
1  Invoice    456
2  Receipt    789

示例 3

在此示例中,我們演示瞭如何使用Series.str.extract() 方法從一系列電子郵件地址中提取電子郵件使用者名稱。

import pandas as pd

# Create a Series of email addresses
s = pd.Series(['user1@example.com', 'info@tutorialspoint.com', 'contact@website.org'])

# Extract usernames from email addresses
result = s.str.extract(r'(?P<username>^[^@]+)')

print("Input Series:")
print(s)
print("\nDataFrame after calling str.extract()):")
print(result)

以下是上述程式碼的輸出:

Input Series:
0          user1@example.com
1    info@tutorialspoint.com
2        contact@website.org
dtype: object

DataFrame after calling str.extract():
  username
0    user1
1     info
2  contact
python_pandas_working_with_text_data.htm
廣告