Hallo,
ich möchte die Daten aus einer xlsx Datei bearbeiten. Dafür habe ich die Datei mit pandas eingelesen und die gewünschte Spalte mit numpy.asarray in eine Liste geladen.
Jetzt möchte ich die Zeilen mit führenden Nullen füllen, solange die Länge des Wertes <10 ist. So soll z.B aus 12345678 --> 0012345678 werden.
Das habe ich mit einer Schleife versucht:
for i in range (len(liste)):
while len(str(liste)) < 10:
liste= "0" + str(liste)
print (liste)
Leider sieht die Liste nach der Ausgabe aber aus wie vorher. Wenn ich anstatt der "0" aber "1" oder eine andere Zahl verwende, funktioniert alles.
Ich hoffe jemand kann mir bei diesem Schritt helfen.
Viele Grüße
Liste aus Excel Datei bearbeiten / mit führenden Nullen füllen
- __blackjack__
- User
- Beiträge: 14054
- Registriert: Samstag 2. Juni 2018, 10:21
- Wohnort: 127.0.0.1
- Kontaktdaten:
@paetsch: Das sollte überhaupt nicht fuktionieren, dass man eine Zeichenkette mit der Ziffer 0 zu einer Zahl ”addiert”. Das ist also ziemlich sicher nicht der Code den Du tatsächlich laufen lassen hast.
Führende Nullen bei Zahlen kann man auch gar nicht in dem Zahlwert speichern. Das ist entweder eine Frage der Formatierung der Anzeige, oder es dürfen keine Zahlen sein sondern Zeichenketten. Dazu sollte man erst einmal klären ob das tatsächlich Zahlen sind oder einfach nur Ziffernfolgen wie beispielsweise Seriennummern oder Postleitzahlen. Und dann den entsprechenden Weg wählen. Bei Zahlen sagt man der Tabellenkalkulation wie die Zelle formatiert werden soll, und bei Zahlen die gar nicht zum rechnen gedacht sind, wandelt man das in Zeichenketten um. In dem Fall dann aber bitte nicht mit so einer Schleife sondern mit Zeichenkettenformatierung (f-Zeichenkettenliteral oder `format()`-Methode) oder zumindest mit der entsprechenden Methode auf Zeichenketten.
Auch das ``for in in len(range(liste))`` sollte nicht sein. Das ist in Python ein „anti pattern“. Man kann direkt über die Elemente von Sequenzen iterieren, ohne den unnötigen Umweg über einen Laufindex.
Führende Nullen bei Zahlen kann man auch gar nicht in dem Zahlwert speichern. Das ist entweder eine Frage der Formatierung der Anzeige, oder es dürfen keine Zahlen sein sondern Zeichenketten. Dazu sollte man erst einmal klären ob das tatsächlich Zahlen sind oder einfach nur Ziffernfolgen wie beispielsweise Seriennummern oder Postleitzahlen. Und dann den entsprechenden Weg wählen. Bei Zahlen sagt man der Tabellenkalkulation wie die Zelle formatiert werden soll, und bei Zahlen die gar nicht zum rechnen gedacht sind, wandelt man das in Zeichenketten um. In dem Fall dann aber bitte nicht mit so einer Schleife sondern mit Zeichenkettenformatierung (f-Zeichenkettenliteral oder `format()`-Methode) oder zumindest mit der entsprechenden Methode auf Zeichenketten.
Auch das ``for in in len(range(liste))`` sollte nicht sein. Das ist in Python ein „anti pattern“. Man kann direkt über die Elemente von Sequenzen iterieren, ohne den unnötigen Umweg über einen Laufindex.
“Vir, intelligence has nothing to do with politics!” — Londo Mollari
@__blackjack__: Erstmal Danke für die Antwort. Ich addiere die Zeichenkette mit der Ziffer Null ja nicht zu einer Zahl, sondern habe die Zahlenfolge ja als String und hänge die Null nur davor. Das Ergebnis sollte immer noch ein String sein. Das Ziel ist, dass am Ende eine andere Zahlenfolge als String vor diese gehängt wird. Erst dann wird alles in int umgewandelt. Die Nullen sind dann nämlich irgendwo in der Mitte und wirken sich so auf die Zahl aus. Wenn also wie im oberen Beispiel aus 12345678 --> 0012345678 wird und dann z.B 65432 davor gehängt wird, ist der integer am Ende "654320012345678", was ja eine andere Zahl ist als "6543212345678".
Das liegt daran, dass `liste` keine Liste ist, sondern ein Pandas-Dataframe (bzw. Series-Objekt), und dort hat jede Spalte einen bestimmten Typ, bei Dir also int, und Pandas
wandelt bei der Zuweisung Strings dann automatisch in int um.
Du mußt also die Serie in String umwandeln und dann Nullen hinzufügen:
wandelt bei der Zuweisung Strings dann automatisch in int um.
Du mußt also die Serie in String umwandeln und dann Nullen hinzufügen:
Code: Alles auswählen
formatierte_zahlen = zahlen.astype(str).str.zfill(10)