Wie ersetze ich Text in einer Spalte eines Pandas-Datenrahmens?


93

Ich habe eine Spalte in meinem Datenrahmen wie folgt:

range
"(2,30)"
"(50,290)"
"(400,1000)"
... 

und ich möchte das ,Komma durch -Bindestrich ersetzen . Ich verwende derzeit diese Methode, aber nichts wird geändert.

org_info_exc['range'].replace(',', '-', inplace=True)

Kann jemand helfen?

Antworten:


188

Verwenden Sie die vektorisierte strMethode replace:

In [30]:

df['range'] = df['range'].str.replace(',','-')
df
Out[30]:
      range
0    (2-30)
1  (50-290)

BEARBEITEN

Wenn wir uns also ansehen, was Sie versucht haben und warum es nicht funktioniert hat:

df['range'].replace(',','-',inplace=True)

Aus den Dokumenten geht Folgendes hervor:

str oder regex: str: string, der genau mit_replace übereinstimmt, wird durch value ersetzt

Da die str-Werte nicht übereinstimmen, erfolgt keine Ersetzung. Vergleichen Sie Folgendes:

In [43]:

df = pd.DataFrame({'range':['(2,30)',',']})
df['range'].replace(',','-', inplace=True)
df['range']
Out[43]:
0    (2,30)
1         -
Name: range, dtype: object

Hier erhalten wir eine genaue Übereinstimmung in der zweiten Reihe und der Austausch erfolgt.


32

Für alle anderen, die von der Google-Suche hierher kommen, um zu erfahren, wie eine Zeichenfolge für alle Spalten ersetzt werden kann (z. B. wenn mehrere Spalten wie die Spalte "Bereich" des OP vorhanden sind): Pandas verfügt über eine integrierte replaceMethode, die für ein Datenrahmenobjekt verfügbar ist.

df.replace(',', '-', regex=True)

Quelle: Docs


2

Ersetzen Sie alle Kommas durch Unterstriche in den Spaltennamen

data.columns= data.columns.str.replace(' ','_',regex=True)

0

Wenn Sie mehr als ein Zeichen in einer Spalte ersetzen möchten, können Sie dies mit regulären Ausdrücken tun:

import re
chars_to_remove = ['.', '-', '(', ')', '']
regular_expression = '[' + re.escape (''. join (chars_to_remove)) + ']'

df['string_col'].str.replace(regular_expression, '', regex=True)
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.