Pandas - Nummer aus string extrahieren

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
naheliegend
User
Beiträge: 439
Registriert: Mittwoch 8. August 2018, 16:42

Hi,

ich habe einen df mit einer column df['text'], die strings beinhaltet.


Code: Alles auswählen

>df['text']

'Das ist text 723453339' 
'888453339undein22.1.2020' 
'hallo723453339das ist' 
'20.2.2020 hallo 723999339' 
'beispiel444453339' 
'hallo923453339 - d a 30' 
Ich bin nur an der 9-stelligen Nummer interessiert. Wie bekomme ich die extrahiert?

Also:

Code: Alles auswählen

>df['nummer']

723453339
888453339
723453339
723999339
444453339
923453339 
__backjack__: "Jemand der VB oder PHP kann, der also was Programmieren angeht irgendwo im negativen Bereich liegt (...)"
Benutzeravatar
snafu
User
Beiträge: 6871
Registriert: Donnerstag 21. Februar 2008, 17:31
Wohnort: Gelsenkirchen

Ich würde dafür re.findall() benutzen:

Code: Alles auswählen

zahlen = re.findall("\d{9}", text)
print("\n".join(zahlen))
Benutzeravatar
__blackjack__
User
Beiträge: 14056
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

Das ist ein `pandas.DataFrame`, da würde ich die `str`-Operationen verwenden die darauf definiert sind. Und man sollte/muss wahrscheinlich auch sicherstellen, dass 10 und mehrstellige Zahlen *nicht* gefunden werden‽
“Vir, intelligence has nothing to do with politics!” — Londo Mollari
naheliegend
User
Beiträge: 439
Registriert: Mittwoch 8. August 2018, 16:42

__blackjack__ hat geschrieben: Dienstag 13. Juli 2021, 20:11 Das ist ein `pandas.DataFrame`, da würde ich die `str`-Operationen verwenden die darauf definiert sind. Und man sollte/muss wahrscheinlich auch sicherstellen, dass 10 und mehrstellige Zahlen *nicht* gefunden werden‽
Wie würde das aussehen?
__backjack__: "Jemand der VB oder PHP kann, der also was Programmieren angeht irgendwo im negativen Bereich liegt (...)"
Benutzeravatar
snafu
User
Beiträge: 6871
Registriert: Donnerstag 21. Februar 2008, 17:31
Wohnort: Gelsenkirchen

Ich fand re.findall() hierfür geeigneter als die String-Operationen. Man muss die IMHO nicht zwingend nutzen, nur weil sie zur Auswahl stehen. 🤷‍♂️
naheliegend
User
Beiträge: 439
Registriert: Mittwoch 8. August 2018, 16:42

Code: Alles auswählen

df['text'].str.extract('(\d{9})', expand=False)
gibt mir die 9-stelligen Nummern.
__backjack__: "Jemand der VB oder PHP kann, der also was Programmieren angeht irgendwo im negativen Bereich liegt (...)"
Benutzeravatar
snafu
User
Beiträge: 6871
Registriert: Donnerstag 21. Februar 2008, 17:31
Wohnort: Gelsenkirchen

Ah, cool. extract() kannte ich bisher nicht. Und das hier ist eindeutig ein Anwendungsfall für reguläre Ausdrücke. Das würde ich nicht Pythons standardmäßigen String-Operationen nachbauen wollen.
Sirius3
User
Beiträge: 18274
Registriert: Sonntag 21. Oktober 2012, 17:20

@snafu: der OP arbeitet mit Dataframes. Und Dataframes haben verschiedene Stringoperationen definiert, die dann auf alle Elemente einer Spalte angewendet werden. Da sind auch Operationen mit regulären Ausdrücken dabei.
Antworten