簡體   English   中英

根據“查找”結果從 dataframe 的列中提取“n”個字符(使用 str.contains() 和 str.find() 和 df.loc[]

[英]Extracting 'n' characters from a column of a dataframe, based on 'find' results (Using str.contains() & str.find() with df.loc[]

如果“id”列包含“(插槽”,則應從“id”列的“輸出”列中提取插槽編號,否則如果“id”列包含“PR GRP”,則應在“輸出”中提取第一個插槽編號' 'grp' 列中的列。Slot No. 的位置是固定的,即在第一種情況下需要從找到 '(Slot' 的位置提取 7 個字符,然后刪除 '(' 以獲得插槽號。在第二種情況下 1st插槽號始終位於第 6 位,並且也將有 6 個字符。

id                            grp                              Output
Alpha-old-1_MOD (Slot01)      -                                Slot01
Alpha-old-1_PR GRP1           MOD (Slot07);MOD (Slot08)        Slot07
Beta-new-1_PR GRP2            MOD (Slot13);MOD (Slot14)        Slot13
Beta-old-1_MOD (Slot03)       -                                Slot03

預期 output:

輸入輸出表 ]

嘗試使用str.extract

df["output"] = df["id"].str.extract("(Slot\d+)").fillna(df["grp"].str.extract("(Slot\d+)"))

>>> df
                         id                        grp  output
0  Alpha-old-1_MOD (Slot01)                          -  Slot01
1       Alpha-old-1_PR GRP1  MOD (Slot07);MOD (Slot08)  Slot07
2        Beta-new-1_PR GRP2  MOD (Slot13);MOD (Slot14)  Slot13
3   Beta-old-1_MOD (Slot03)                          -  Slot03

使用正則表達式查找單詞 Slot 后跟 2 個數字

import re

data="""id\tgrp
Alpha-old-1_MOD (Slot01)\t-
Alpha-old-1_PR GRP1\tMOD (Slot07);MOD (Slot08)
Beta-new-1_PR GRP2\tMOD (Slot13);MOD (Slot14)
Beta-old-1_MOD (Slot03)\t-
"""



df=pd.read_csv(io.StringIO(data),sep='\t')

pattern=r"[\s\w\(]+(Slot{1}\d{2})+[\s\w\)]+"

df['output']=''
for key,row in df.iterrows():
    if re.search("PR GRP",str(row['id'])):
        matches=re.findall(pattern,str(row['grp']))
    else:
        matches=re.findall(pattern,str(row['id']))
    if len(matches)>0:
        df.loc[key,'output']=matches[0]

print(df[['id','grp','output']])    

output:

                         id                        grp            output
0  Alpha-old-1_MOD (Slot01)                          -          [Slot01]
1       Alpha-old-1_PR GRP1  MOD (Slot07);MOD (Slot08)          [Slot07]
2        Beta-new-1_PR GRP2  MOD (Slot13);MOD (Slot14)          [Slot13]
3   Beta-old-1_MOD (Slot03)                          -          [Slot03]

暫無
暫無

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

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