相关文章推荐

从表格行的列表中搜索文本,如果找到的话,将其提取到新的列中

1 人关注

我有一个标题列表,其中有电竞队的名字。我需要在一个单独的列中提取它们。如果标题有相同的 "掩码",那就很容易了,但它们是不同的。

我在想,如果我有一个所有球队的列表,是否有办法从标题中提取球队名称。比如编写一段代码,循环浏览每一行,如果发现有球队,就在新的一列中复制球队名称。

团队名单。

teams = ['IG.V', 'Matador', 'Galaxy Racer', 'MG.Trust', 'Five brothers', 'Team Rocket', 'Cobra Gaming', 'Revenge Gaming', 'Secret', 'Virtus.pro']

Expected result

[RU] Galaxy Racer 0:0 MG.Trust (BO3) Moon Studio Carnival Cup @Mantis Galaxy Racer MG.Trust [RU/EN] Five brothers - Team Rockets Asian Gold Occupation S19 Five Brothers Team Rocket [RU/EN] Cobra Gaming - Revenge Gaming Masters Tournament S13 Cobra Gaming Revenge gaming LF พากย์ Secret⚔️Virtus.pro (Bo3)🏆EPIC League: Division 1 - รอบแบ่งกลุ่ม Secret Virtus.pro
python
python-3.x
pandas
string
dataframe
Nekit Kravchenko
Nekit Kravchenko
发布于 2020-12-11
1 个回答
jezrael
jezrael
发布于 2020-12-11
已采纳
0 人赞同

Use Series.str.extractall re.escape 表示lsit的转义值,用 \b\b 表示添加的单词bondaries,最后用【替换代码】表示添加到原文中。 Series.unstack with DataFrame.join :

import re
#change Team Rocket to Team Rockets for match
teams = ['IG.V', 'Matador', 'Galaxy Racer', 'MG.Trust', 
         'Five brothers', 'Team Rockets', 'Cobra Gaming', 
         'Revenge Gaming', 'Secret', 'Virtus.pro']
pat = "(" + '|'.join(r"\b{}\b".format(re.escape(x)) for x in teams) + ")"
df = df.join(df['Title'].str.extractall(pat)[0].unstack().add_prefix('team'))
print (df)
   N                                              Title          team0  \
0  1  [RU] IG.V 0:1 Matador (BO2) MS Mid-Autumn @Sko...           IG.V   
1  2  [RU] Galaxy Racer 0:0 MG.Trust (BO3) Moon Stud...   Galaxy Racer   
2  3  [RU/EN] Five brothers - Team Rockets Asian Gol...  Five brothers   
3  4  [RU/EN] Cobra Gaming - Revenge Gaming Masters ...   Cobra Gaming   
4  5  LF พากย์ Secret⚔️Virtus.pro (Bo3)🏆EPIC League:...        Secret   
            team1  
0         Matador  
1        MG.Trust  
2    Team Rockets  
3  Revenge Gaming  
4      Virtus.pro  

编辑:经过一些测试,解决方案是通过.astype(str)将数值转换成字符串。

df1 = pd.read_excel('vcxvcvx.xlsx')
# print (df1)
df2 = pd.read_csv('testcase.csv', index_col=[0])
# print (df2)
pat = "(" + '|'.join(r"\b{}\b".format(re.escape(x)) for x in df1['Teams'].astype(str)) + ")"
 
推荐文章