簡體   English   中英

如何有條件地將子字符串復制到pandas數據幀的新列?

[英]How to conditionally copy a substring into a new column of a pandas dataframe?

這是我的第一篇文章,所以希望我不要討論這個問題,我很清楚。 基本上,這是一個兩部分問題。 我需要設置代碼,首先檢查列A是否為“有效”。 如果是這樣,我需要從列B中提取子字符串並將其放在一個新列中,此處標記為“C”。 如果條件為假,我想加入“NA”。 請參閱第二個表格以了解我的預期結果。

|     A       |             B                     |
|-------------|-----------------------------------|
|    VALID    |asdfafX'XextractthisY'Yeaaadf      |
|    INVALID  |secondrowX'XsubtextY'Yelakj        |
|    VALID    |secondrowX'XextractthistooY'Yelakj |

|     A       |             B                       |      C          |
|-------------|-------------------------------------|-----------------|
|    VALID    |"asdfafX'XextractthisY'Yeaaadf"      | extractthis     |
|    INVALID  |"secondrowX'XsubtextY'Yelakj"        | NA              |
|    VALID    |"secondrowX'XextractthistooY'Yelakj" | extractthistoo  |

有幾點需要注意:

- 子字符串將始終在短語“X'X”之后開始,並在“Y'Y”之前完成。

- 子串在不同的單元格之間具有不同的長度。

我知道以下代碼是錯誤的,但我想告訴你我是如何嘗試解決這個問題的:

import pandas as pd

if df[A] == "VALID":
   df[C] = df[B]df.str[start:finish]
else:
   df[C].isna()

我為這個基本代碼中的錯誤道歉,因為我完全是python的新手,仍然依賴IDE和試錯來指導我。 您可以提供的任何幫助表示贊賞。

您可以使用pd.Series.str.extract

In [737]: df
Out[737]: 
         A                                   B
0    VALID       asdfafX'XextractthisY'Yeaaadf
1  INVALID         secondrowX'XsubtextY'Yelakj
2    VALID  secondrowX'XextractthistooY'Yelakj

In [745]: df['C'] = df[df.A == 'VALID'].B.str.extract("(?<=X'X)(.*?)(?=Y'Y)", expand=False)

In [746]: df
Out[746]: 
         A                                   B               C
0    VALID       asdfafX'XextractthisY'Yeaaadf     extractthis
1  INVALID         secondrowX'XsubtextY'Yelakj             NaN
2    VALID  secondrowX'XextractthistooY'Yelakj  extractthistoo

正則表達式模式是:

(?<=X'X)(.*?)(?=Y'Y)
  • (?<=X'X)X'X

  • (.*?)匹配lookbehind和lookahead之間的所有內容

  • (?=Y'Y)Y'Y

暫無
暫無

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

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