2016-07-29 14 views
3

Ersetzt die pandas.DataFrame.replace Regex Unterstützung Wildcards und "Capture-Gruppen"?pandas.DataFrame.replace mit Platzhaltern

Zum Beispiel ([A-Z])(\w+) durch \2\1 ersetzen?

Welche Art von regulärem Ausdruck wird unterstützt? Unterstützt Perls Regex? ZB OK ([A-Z])(\w+) mit \l\1\2 zu ersetzen (\l: das nächste Zeichen in Kleinbuchstaben ändern.)

UPDATE:

Wie Steve hat darauf hingewiesen, nach dem Python documentation, sollte es funktionieren, aber die Folgendes gibt mir nicht, was ich erwartet habe:

df = pd.DataFrame({'A': np.random.choice(['foo', 'bar'], 100), 
        'B': np.random.choice(['one', 'two', 'three'], 100), 
        'C': np.random.choice(['I1', 'I2', 'I3', 'I4'], 100), 
        'D': np.random.randint(-10,11,100), 
        'E': np.random.randn(100)}) 
df.replace("f(.)(.)","b\1\2", regex=True,inplace=True) 

Was ist los?

Thx

+2

Sie müssen rohe Zeichenfolgen in Ihren Regex-Mustern verwenden! Der umgekehrte Schrägstrich entkommt den 1 und 2 Zeichen in Ihrer Zeichenfolge! Dies sollte funktionieren: 'df.replace (r" f (.) (.) ", R" b \ 1 \ 2 ", regex = Wahr, inplace = True)' Beachten Sie, dass die rohe Zeichenkette für das erste Argument Overkill ist, aber Sie sollten nur in der Gewohnheit, sie mit Regexprs –

+0

BINGO! VIELEN DANK!! – xpt

Antwort

2

Nach der pandas documentation:

Regex Substitution wird unter der Haube mit re.sub durchgeführt. Die Regeln für die Substitution von re sind die gleichen.

Also, ja, alle Substitutionen, die mit Python re.sub (wie \1) durchgeführt werden kann, kann auch mit pandas.DataFrame.replace durchgeführt werden. Weitere Informationen finden Sie unter Python documentation.