[英]How can I find a specific substring in a Pandas DataFrame, and then get the text after it?
所以我有一個從 html 網頁獲取的 Pandas 數據框。 數據框只有 1 列,該列沒有識別名稱。 我想從數據框中找到一個特定的子字符串,然后立即獲取該子字符串之后的文本。
注意:在子字符串搜索中永遠不會重復。
例如:學校 2 永遠不會有 2 個實例:
數據框的格式如下:
School 1: 1 Hour Delay
School 2: 2 Hour Delay
School 3: Closed
我希望能夠搜索學校 3:然后返回狀態,是關閉、延遲 1 小時還是延遲 2 小時。
我最初的想法是if "School 3:" in df print("School 3: found")
但我只是從中得到一個錯誤,我假設是因為你不能只檢查這樣的字符串。 如果有人知道如何找到一個子字符串,然后在它之后獲取文本,我很想知道。
假設只有一行總是匹配這種情況下,你可以使用str.extract
:
df.iloc[:,0].str.extract('(?<=School 3: )(.*)', expand=False).dropna().values[0]
# 'Closed'
(注意:如果多行符合此條件,則僅返回第一條匹配的狀態。)
否則,如果可能沒有匹配項,您將需要一個 try-except:
try:
status = (df.iloc[:,0]
.str.extract('(?<=School 3: )(.*)', expand=False)
.dropna()
.values[0])
except (IndexError, ValueError):
status = np.nan
假設數據框看起來像
status
0 School 1: 1 Hour Delay
1 School 2: 2 Hour Delay
2 School 3: Closed
你可以
txt = 'School 3'
df.status[df.status.str.contains(txt)].str[len(txt) + 2:] # +2 for skipping ": " after the school name
結果:
2 Closed
Name: status, dtype: object
但是,IMO 通過首先將包含兩個信息的單列拆分為兩列會更加清晰:
df = df.status.str.split(': ', expand=True)
df.columns = ['school', 'status']
# school status
#0 School 1 1 Hour Delay
#1 School 2 2 Hour Delay
#2 School 3 Closed
那么您可以通過第一列的布爾索引簡單地檢索第二列的內容:
txt = 'School 3'
df.status[df.school==txt]
#2 Closed
#Name: status, dtype: object
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.