簡體   English   中英

Pandas - 使用 str.contains 匹配字符串

[英]Pandas - using str.contains to match string

我的 pandas df 中有一列如下所示:

Cycle 1 (0 h)
           A
           B
           C
Cycle 2 (0 h 43 min)
           A
           B
           C

我正在嘗試匹配“循環”並提取數字。 理想情況下,我希望我的 output 看起來像這樣:

       0
       A
       B
       C
      0,43
       A
       B
       C

我試過了:

df['1'] = df['1'].str.contains('Cycle', regex=True).str.extract('(\d+)')

但它完全擺脫了循環線——我認為在提取數字后我可以使用str.split()並只保留相關的數字,然后我可以用逗號分隔它們。 但我似乎無法提取數字。

您可以使用

rx = r'^Cycle\s+\d+\s+\((\d+)(?:\s*\w+\s*(\d+))?.*'
df['1'] = df['1'].str.replace(rx, lambda x: f'{x.group(1)},{x.group(2)}' if x.group(2) else x.group(1), regex=True)

請參閱正則表達式演示 在這里,搜索^Cycle\s+\d+\s+\((\d+)(?:\s*\w+\s*(\d+))?.*模式,如果有匹配項,則將其替換與第 1 組 + , + 第 2 組內容,或僅第 1 組值取決於第 2 組是否匹配。

詳情

  • ^ - 字符串的開始
  • Cycle ——一個字
  • \s+ - 一個或多個空格
  • \d+ - 一位或多位數字
  • \s+ - 一個或多個空格
  • \( - 一個(字符
  • (\d+) - 第 1 組 ( \1 ):一個或多個數字
  • (?:\s*\w+\s*(\d+))? - 可選的非捕獲組匹配可選的序列
    • \s*\w+\s* - 一個或多個包含一個或多個空白字符的單詞字符
    • (\d+) - 第 2 組 ( \2 ):一位或多位數字
  • .* - 字符串的 rest。

如果 Group 2 匹配,則替換為 Group 1 + , + Group 2 值,否則,它只是 Group 1 值。

Pandas測試:

import pandas as pd
df = pd.DataFrame({'1': ['Cycle 1 (0 h)', 'Cycle 1 (0 h 48 min)']})
rx = r'^Cycle\s+\d+\s+\((\d+)(?:\s*\w+\s*(\d+))?.*'
df['1'].str.replace(rx, lambda x: f'{x.group(1)},{x.group(2)}' if x.group(2) else x.group(1), regex=True)
# => 0       0
# => 1    0,48
# => Name: 1, dtype: object

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM