Buchstaben vor der Zahl entfernen

mit matplotlib, NumPy, pandas, SciPy, SymPy und weiteren mathematischen Programmbibliotheken.
Antworten
Holzwurm33
User
Beiträge: 6
Registriert: Donnerstag 13. Januar 2022, 14:17

Hallo,
ich bin noch relativ neu auf dem Gebiet Python. Ich stehe vor der Aufgabe eine Exceltabelle auszuwerten mittels Python bzw. Pandas.
Das einlesen klappt, nur die Tabelle ist etwas schwierig zu verarbeiten.

Beispiel:
K000000067083 16.08.2010 1.919.693 1245,0 1244,0
K000000069379 25.06.2009 1.038.509 1241,0 1242,0
K000000069379 12.10.2009 1.038.509 1243,0 1243,0
K000000069379 08.12.2008 1.038.509 1249,5 1249,0
K000000069379 18.10.2008 1.038.509 V1250,0 V1250,0
K000000068198 10.11.2010 2.693.769 1246,0 1246,0
K000000068198 16.08.2010 2.693.769 1243,0 1240,0
K000000068420 29.10.2009 2.512.963 1183,0 1183,0

Zu sehen sind hier 5 Spalten. In den letzten beiden Spalten sind Zahlen zu finden, denen ein Buchstabe vorangestellt ist. symbolisch für das Problem.
Wie bekomme ich die einzelnen Buchstaben (hier "V") aus den "Zellen" des df entfernt ohne das die Werte verschwinden?

Vielen Dank schon mal im Vorraus,
Grüße HW33
Benutzeravatar
__blackjack__
User
Beiträge: 13071
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@Holzwurm33: Die sinnvollste Lösung wäre den zu finden der für diese unregelmässigen Werte verantwortlich ist, und den dazu bringen das zu korrigieren und mit Konsequenzen zu drohen, dass er demnächst aufpassen soll, saubere Daten zu liefern. 😈

Ansonsten gibt es zwei Wege:

Weg 1: Das `converters`-Argument von `read_excel()` und eine Funktion die so eine Zeichenkette in eine Zahl wandelt.

Weg 2: Die Daten nach dem (falsch) einlesen zu richten. `Series`-Objekte haben unter dem `str`-Attribut einen Haufen Methoden für Zeichenkettenoperationen auf den Elementen. Die meisten entsprechen den normalen Methoden auf Zeichenketten, aber es gibt bei vielen auch kleinere bis grössere Unterschiede. Man sollte also auf jeden Fall auch bei ”bekannten” Methoden mal in die Dokumentation schauen, um Überraschungen zu vermeiden. Die Pandas-Methoden nehmen bei einigen Operationen Zeichenkettenargumente beispielsweise nicht einfach als Zeichenkette sondern betrachten den Inhalt als Muster eines regulären Ausdrucks. Zum Beispiel auch das `replace()` das hier sinnvoll sein könnte. Denn Du willst ja nicht nur den Buchstaben entfernen, sondern auch das Dezimalkomma durch einen Dezimalpunkt ersetzen um die Werte dann letztlich tatsächlich in Zahlen umwandeln zu können.

Es sieht so aus als wäre da auch eine Datumsspalte als *Text*. Das möchte man vielleicht auch ändern. Vielleicht auch schon in der Eingabedatei.
„All religions are the same: religion is basically guilt, with different holidays.” — Cathy Ladman
Holzwurm33
User
Beiträge: 6
Registriert: Donnerstag 13. Januar 2022, 14:17

Hallo blackjack,

vielen Dank für die Hinweise. Ja die Welt ist leider nicht immer schwarz weiß, und so sehen meine Datenquellen auch aus.
Ich habe das "converters" schon mal ausprobiert, leider noch ohne Erfolg.
Ich denke das "replace" kann das Problemchen lösen. Das teste ich am Wochenende mal aus.
Das mit den Komma <-> Punkt ist mir noch gar nicht in den Sinn gekommen.
Also vielen Dank und schönes Wochenende
Holzwurm33
User
Beiträge: 6
Registriert: Donnerstag 13. Januar 2022, 14:17

Hallo noch einmal,

an alle die es interessiert. ich habe das Problemchen wie folgt gelöst:

# definition der Spalten des df
cols_to_check = ['Durchmesser links', 'Durchmesser rechts']

# mit der Funktion .replace() und den Bedingungen
df[cols_to_check] = df[cols_to_check].replace({'V':''}, regex=True)

So hat es bei mit geklappt, aus Spalten mit Zahlen und Zahlen-Buchstaben kombinationen das "V" zu entfernen.

Grüße,
HW33
Antworten