2017-10-19 94 views
3

我有这样的:提取,并在大熊猫数据框中使用正则表达式替换子

           Title 
Num              
0 <span class="o-label--tiny">VALEUR ÉNERGÉTIQUE</span> 
1   <span class="o-label--tiny">PROTÉINES</span> 
2   <span class="o-label--tiny">GLUCIDES</span> 

<class 'pandas.core.frame.DataFrame'> Num Index(['Title'], dtype='object') 

这就是我想要的:

  Title 
Num              
0 VALEUR ÉNERGÉTIQUE 
1   PROTÉINES 
2   GLUCIDES 

这是我公司开发的正则表达式:

(<span class=\"o-label--tiny\">)([a-zA-Z]+\s*\w*)(</span>) 

测试它我看到它匹配整个初始字符串,并为不同的子字符串组。最后,我希望组(2)在我的数据框列中。 (我下面的例子显示了明确的正则表达式,但我也尝试了re.compile结果,它不能使我得到最终结果)。

这是我曾尝试:

df['Title'] = df['Title'].replace({'<span class=\"o-label--tiny\">': ''}, inplace=True, regex=True) 

结果:

Title             
Num               
0 None 
1 None 
2 None 

尝试号码2:

df['Title'] = df['Title'].str.replace('<span class=\"o-label--tiny\">', repl = '') 

结果数2:

Title 
Num               
0  NaN 
1  NaN 
2  NaN 

尝试号码3:

df['Title'] = df[lambda df: df.columns[0]].str.extract('(>[a-zA-Z]+\s*\w*)', expand=False) 

结果3:

Title 
Num               
0  NaN 
1  NaN 
2  NaN 

我真的不明白我做错了任何让我期望的结果帮助将不胜感激。谢谢!

回答

1

使用str.extract

df['Title']=df['Title'].str.extract('<span class=\"o-label--tiny\">(.*)</span>',expand=False) 
print (df) 
        Title 
Num      
0 VALEUR ÉNERGÉTIQUE 
1    PROTÉINES 
2    GLUCIDES 

如果可能的不同tag S或class ES:

df['Title'] = df['Title'].str.extract('>(.*)<',expand=False) 
print (df) 
        Title 
Num      
0 VALEUR ÉNERGÉTIQUE 
1    PROTÉINES 
2    GLUCIDES 
+1

您已经发布的答案? – Dark

+0

我刚刚将此添加为评论。你编辑它。我删除我的回答 – Dark

+0

@jezrael:我试过你的代码,但都没有为我工作。我仍然拿到NaN而不是正确的字符串。 ?? – ChiChi

0

正则表达式

我不想在DF东西进入,但我希望这很有用:

import re 

stringa = """ 
0 <span class="o-label--tiny">VALEUR ÉNERGÉTIQUE</span> 
1   <span class="o-label--tiny">PROTÉINES</span> 
2   <span class="o-label--tiny">GLUCIDES</span> 
""" 

pattern1 = "[0-9]" 
pattern = ">(.*)<" 

found = re.findall(pattern1, stringa) 
found2 = re.findall(pattern, stringa) 

for f in range(len(found)): 
    print(found[f] + " " + found2[f]) 

输出

0 VALEUR ÉNERGÉTIQUE 
1 PROTÉINES 
2 GLUCIDES