2016-06-06 3 views
-1

I eine Spalte von Zeitzonenzeichenfolgen in einer Pandas DateFrame haben, wo jeder String Eintrag eine Variante der folgenden ist:Performing regex Extraktion mit anwenden() auf pandas Datenrahmen Spalte verwendet Ergebnis der ersten Zeile für alle Zeilen

'Local Time Zone (America/Chicago (CST) offset -21600)' 

ich versuche, die numerisch zu extrahieren Offset (in Sekunden angegeben) am Ende der Schnur mit einem apply Aufruf:

df['minuteOffset'] = df.timezone.apply(lambda x: int(re.match('.*?offset (-?[0-9]*)\\)', a).group(1))) 

Allerdings, wenn ich an dem Datenrahmen schaue dann, ich dass ersten Wert sehen -21.600 für alle Zeilen, auch wenn andere Zeilen habe andere Werte. Wie kann ich die Regex pro Zeile korrekt extrahieren, um eine neue Spalte zu generieren, und warum ist der obige Fehler?

+0

Haben Sie den Variable 'a' in der Regex, wenn Sie tatsächlich 'x' zu verwenden, zu verstehen? – rumdrums

Antwort

0

Ich würde es auf diese Weise tun:

In [85]: In [82]: df 
Out[85]: 
    id            timezone 
0 1 Local Time Zone (America/Chicago (CST) offset -21600) 
1 2 Local Time Zone (Kiev/Ukraine (EEST) offset +10800) 

In [86]: df['minuteOffset'] = df.timezone.str.replace(r'.*offset\s+([\+\-\d+]+)\)', r'\1').astype(int)/60 

In [87]: df 
Out[87]: 
    id            timezone minuteOffset 
0 1 Local Time Zone (America/Chicago (CST) offset -21600)  -360.0 
1 2 Local Time Zone (Kiev/Ukraine (EEST) offset +10800)   180.0 
+0

@helloB, hat es geholfen? – MaxU

Verwandte Themen