我正在尝试使用列表来提取特定的字符串。在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
答案 0 :(得分:3)
将Series.str.extract
与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
答案 1 :(得分:3)
另一种方法可能是使用re.search()
import re
df['Currency_updated'] = df['Currency'].apply(lambda x: re.search('|'.join(currency), x).group(0) if x!='NAs' else None)
答案 2 :(得分:2)
您可以创建一个对数据框的行进行操作的函数:
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
答案 3 :(得分:1)
我建议将<active>true</active>
与
str.extract
请参见regex demo。
请注意,(?<![^\W_])(SGD|GBP|USD|EUR)(?![^\W_])
/ (?<![^\W_])
是明确的单词边界,也将(?![^\W_])
(下划线)视为“非单词”字符,因此{{1 }}被视为一个完整的单词。
在Python中,可以使用_
和EUR
构建正则表达式,以防万一您可能在货币名称中包含_EUR_
或其他特殊字符,例如{{1} }。
r'(?<![^\W_])({})(?![^\W_])'.format('|'.join(map(re.escape, currency)))
输出:
re.escape