2017-10-19 3 views
3

Ich habe dies:Extrahieren und Teilzeichenfolge ersetzt in einem Pandas Datenrahmen mit regex

           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') 

Dies ist, was ich will:

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

Dies ist die regex ich entwickelt:

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

Testen es Ich sehe, dass es die gesamte anfängliche Zeichenfolge übereinstimmt und Gruppen für die verschiedenen Teilzeichenfolgen hat. Am Ende möchte ich Gruppe (2) in meiner Dataframe-Spalte. (Meine Beispiele unten zeigen die explizite Regex, aber ich habe diese auch mit dem re.compile-Ergebnis versucht, das nicht funktioniert, um mich zu meinem endgültigen Ergebnis zu bringen).

Dies ist, was ich versucht habe:

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

Das Ergebnis:

Title             
Num               
0 None 
1 None 
2 None 

Versuch Nummer 2:

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

Ergebnis Nummer 2:

Title 
Num               
0  NaN 
1  NaN 
2  NaN 

Versuch Nummer 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 

Ich sehe wirklich nicht, was ich tue, falsch und jede Hilfe zu meinem gewünschten Ergebnis bekommen würde geschätzt. Vielen Dank!

Antwort

1

Verwendung 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 

Wenn möglich, verschiedene tag s oder class es:

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

Sie die Antwort schon geschrieben? – Dark

+0

Ich wollte das als Kommentar hinzufügen. Du hast es bearbeitet. Ich lösche meine Antwort – Dark

+0

@jezrael: Ich habe versucht, Code, aber keiner arbeitete für mich. Ich habe immer noch NaN anstelle der richtigen Saiten. ?? – ChiChi

0

regex

Ich möchte nicht in der df Sache geben, aber ich wünschte, das ist nützlich:

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]) 

Ausgang

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