是否有一个函数用于选择指定字符串后的前两个单词?

2024-09-30 22:11:26 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图在数据集中选择字符串“POS PURCHASE”后面的前两个单词

这是我的数据集

df:   
    ID        transaction_description
     1         POS PURCHASE MR PRICE WHK FAC
     2         WITHDRAWAL FEE
     3         POS PURCHASE KFC WERNHIL STATE
     4         REJECTED ATM TRANSACTION
     5         ATM CASH WITHDRAWAL
     6         POS PURCHASE EDGARS GROVE

我希望我的输出是这样的:

dfnew:
    ID       transaction_description                 TRANX
     1       POS PURCHASE MR PRICE WHK FAC          MR PRICE
     2       WITHDRAWAL FEE                         WITHDRAWAL FEE
     3       POS PURCHASE KFC WERNHIL STATE         KFC WERNHIL
     4    REJECTED ATM TRANSACTION               REJECTED ATM TRANSACTION
     5         ATM CASH WITHDRAWAL                   ATM CASH WITHDRAWAL  
     6         POS PURCHASE EDGARS GROVE MALL        EDGARS GROVE

我尝试使用此代码,但无法创建包含所需输出的新列

code:

   for value in df['transaction_description'].values:
       non_data = re.split('POS PURCHASE |POS PURCHASE ',value)
       terms_list = [term for term in non_data if len(term) > 0] 
       substrs = [term.split()[0:1] for term in terms_list] 
       result = [' '.join(term) for term in substrs] 
   print (result)

Tags: inposfordescriptionpurchasepricetransactionmr
2条回答

这是一种使用regex的方法

例如:

import re

df = pd.DataFrame({"transaction_description": ['POS PURCHASE MR PRICE WHK FAC', 'WITHDRAWAL FEE', 'POS PURCHASE KFC WERNHIL STATE', 'REJECTED ATM TRANSACTION', 'ATM CASH WITHDRAWAL', 'POS PURCHASE EDGARS GROVE']})
df["TRANX"] = df["transaction_description"].apply(lambda x: re.search(r"POS PURCHASE (\w+\s+\w+)", x).group(1) if "POS PURCHASE" in x else x)
print(df)

输出:

          transaction_description                     TRANX
0   POS PURCHASE MR PRICE WHK FAC                  MR PRICE
1                  WITHDRAWAL FEE            WITHDRAWAL FEE
2  POS PURCHASE KFC WERNHIL STATE               KFC WERNHIL
3        REJECTED ATM TRANSACTION  REJECTED ATM TRANSACTION
4             ATM CASH WITHDRAWAL       ATM CASH WITHDRAWAL
5       POS PURCHASE EDGARS GROVE              EDGARS GROVE

使用str.extract编辑

df = pd.DataFrame({"transaction_description": ['POS PURCHASE MR PRICE WHK FAC', 'WITHDRAWAL FEE', 'POS PURCHASE KFC WERNHIL STATE', 'REJECTED ATM TRANSACTION', 'ATM CASH WITHDRAWAL', 'POS PURCHASE EDGARS GROVE']})
df["TRANX"] = df["transaction_description"].str.extract(r"POS PURCHASE (\w+\s+\w+)")
df["TRANX"].fillna(df["transaction_description"], inplace=True)
print(df)

如果POS购买总是在开始,就像示例数据中的情况一样,您可以将其删除

df['TRANX'] = df['transaction_description'].str.replace('POS PURCHASE ', '')

相关问题 更多 >