2017-09-21 5 views
-1

Ich habe eine Spalte in einer Pandas df vom Typ object, die ich analysieren möchte die erste Zahl in der Zeichenfolge zu bekommen, und erstellen Sie eine neue Spalte, die Nummer als int enthält.Erstellen neuer Spalte In Pandas Datenrahmen Mit Regex

Zum Beispiel:

Bestehende df

col 
    'foo 12 bar 8' 
    'bar 3 foo' 
    'bar 32bar 98' 

Wunsch df

col    col1 
    'foo 12 bar 8' 12 
    'bar 3 foo'  3 
    'bar 32bar 98' 32 

I-Code, der in der Spalte Serie

int(re.search(r'\d+', df.iloc[0]['col']).group())

012 auf jeder einzelnen Zelle funktioniert

Der obige Code funktioniert gut und gibt 12 zurück, wie es sollte. Aber wenn ich versuche, eine neue Spalte mit der gesamten Serie zu erstellen:

df['col1'] = int(re.search(r'\d+', df['col']).group())

bekomme ich folgende Fehler:

Typeerror: erwartete String oder Byte-ähnliches Objekt

Ich habe versucht, eine Verpackung str() um df['col'], die von dem Fehler losgeworden, sondern lieferte alle 0'en in col1

ich habe auch versucht col zu einem list der Umwandlung Strings und Iterieren durch die list, die nur den gleichen Fehler ergibt. Weiß jemand was ich falsch mache? Hilfe wäre sehr willkommen.

+0

Check-out die 'DataFrame.apply()' Methode. Wahrscheinlich ist Ihre Berechnung zu komplex für eine einfache Zuweisung. –

+2

Sie könnten versuchen, 'df ['col']. Str.extract (r '(\ d +)')' –

+0

@ WiktorStribiżew, ich würde auch hinzufügen "expand = False" ... – MaxU

Antwort

0

Dies wird den Trick:

search = []  
for values in df['col']: 
    search.append(re.search(r'\d+', values).group()) 

df['col1'] = search 

die Ausgabe wie folgt aussieht:

  col col1 
0 foo 12 bar 8  12 
1  bar 3 foo  3 
2 bar 32bar 98  32 
+0

Perfekt, danke! – Cam8593

+0

Gern geschehen! – Albo

Verwandte Themen