Pandas/Dataframes und Regular Expressions...

mit matplotlib, NumPy, pandas, SciPy, SymPy und weiteren mathematischen Programmbibliotheken.
Antworten
OrangeZebra
User
Beiträge: 3
Registriert: Dienstag 24. November 2020, 15:31

Hallo miteinander

Ich bin mehr oder weniger Neuling in der Python-Welt (komme aus C/C++, vor 20 Jahren), konnte aber doch schon einiges erreichen. Um RexEx konnte ich mich jahrelang erfolgreich drücken, jetzt wohl nicht mehr :-)

Nun stehe ich wirklich an:
In einem Dataframe habe ich eine Spalte INFO. Die hat Daten zum Beispiel 'X-Z-34567A' und auch 'X-Y-123456'.
In einer Spalte 'INFO_NR' möchte ich die Daten '123456', respektive '345670' (also Zahlenteil *10, wenn noch ein Buchstabe am Ende da ist) drin haben.
Ein Code-Schnipsel:

Code: Alles auswählen

# das verarbeitet die X-Z-34567A korrekt, füllt die anderen mit nan
data_total['INFO_NR'] = data_total['INFO'].str.extract('^X-\w-(\d*)[ABCDEFGHILKMNOPQRSTUVWXYZ]$', expand=False).str.strip()
data_total['INFO_NR'] = data_total['INFO_NR'].fillna('0')
data_total['INFO_NR'] = data_total['INFO_NR'].astype(np.int64)*10

# das verarbeitet die X-Y-123456 korrekt, füllt die vorhin erfolgreich ermittelten Felder wieder mit nan!!
data_total['INFO_NR'] = data_total['INFO'].str.extract('^X-\w-(\d*)$', expand=False).str.strip()
data_total['INFO_NR'] = data_total['INFO_NR'].astype(np.int64)*10
Wie kann ich erreichen, dass der zweite Teil nur auf Zeilen angewendet wird, wo INFO_NR == 0 ist??

Ich denke, dass ich die Selektioniererei von Daten noch nicht völlig verinnerlicht habe.

Und wie ich Python kennengelernt habe, sollte das sowieso viel eleganter gehen...

Schon mal vielen Dank für Eure Hilfe!
Stephan
Antworten