从lis中检测列中的特定字符串序列

2024-04-26 06:47:37 发布

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

我试着用一个列表提取特定的字符串。在Python中这可能吗?你知道吗

我这里有一张单子:

currency = ['SGD', 'GBP', 'USD', 'EUR']

如果这些字符串中的任何一个出现在列中,我希望用相应的货币创建一个新列。这是我的预期输出:

预期输出

Name         Currency        Currency_updated    
0   Tom    RANDOM_SGD_2017         SGD
1   nick    TEST_EUR_1381          EUR
2   krish   FORFUN GBP             GBP
3   jack    NAs                    <blank>

可复制示例

import pandas as pd 

data = {'Name':['Tom', 'nick', 'krish', 'jack'], 'Currency':['RANDOM_SGD_2017', 'TEST_EUR_1381', 'FORFUN GBP', 'NAs']} 

df = pd.DataFrame(data) 

使用的数据帧

     Name       Currency
0   Tom RANDOM_SGD_2017
1   nick    TEST_EUR_1381
2   krish   FORFUN GBP
3   jack    NAs

Tags: 字符串nametestrandomeurnickcurrencypd
3条回答

您可以创建一个对数据帧的行进行操作的函数:

import pandas as pd

def f(row):
  for elem in currency:
      if elem in row['Currency']:
           return elem

currency = ['SGD', 'GBP', 'USD', 'EUR']
data = {'Name':['Tom', 'nick', 'krish', 'jack'], 'Currency':['RANDOM_SGD_2017', 'TEST_EUR_1381', 'FORFUN GBP', 'NAs']}

df = pd.DataFrame(data)
df['Currency_Updated'] = df.apply(f, axis=1)
print(df)

输出

    Name         Currency Currency_Updated
0    Tom  RANDOM_SGD_2017              SGD
1   nick    TEST_EUR_1381              EUR
2  krish       FORFUN GBP              GBP
3   jack              NAs             None

^{}join|表示正则表达式OR-'SGD|GBP|USD|EUR'表示'SGD' or 'GBP' or 'USD' or 'EUR'

pat = '|'.join(currency)
df['Currency_updated'] = df['Currency'].str.extract('('+ pat + ')', expand=False)
print (df)
    Name         Currency Currency_updated
0    Tom  RANDOM_SGD_2017              SGD
1   nick    TEST_EUR_1381              EUR
2  krish       FORFUN GBP              GBP
3   jack              NAs              NaN

另一种方法是使用re.search()

import re
df['Currency_updated'] = df['Currency'].apply(lambda x: re.search('|'.join(currency), x).group(0) if x!='NAs' else None)

相关问题 更多 >