Excel Tabelle in Dataframe einladen mit nummerischen Wert als String

mit matplotlib, NumPy, pandas, SciPy, SymPy und weiteren mathematischen Programmbibliotheken.
Antworten
MacGruber
User
Beiträge: 63
Registriert: Sonntag 28. Mai 2017, 13:04

Hallo Forumskollegen,

mich plagt mal wieder ein Problem. Ich möchte eine Excel Tabelle in einen Dataframe einladen. Soweit kein Problem, aber eine Spalte der Tabelle enthält Komponentennummern, die nur aus Zahlen besteht und in manchen Fällen beginnen diese mit einer oder mehrerer Nullen. Beim Einladen in den Dataframe verschwinden die Nullen dann leider. So wird aus der Komponenten-Nr. 0012345 wird dann 12345.

Importiert wird die Tabelle mit der Methode read_excel aus Pandas.

Code: Alles auswählen

import pandas as pd
df=pd.read_excel("5636_TCs.xlsx")
In der Documentation zu read_excel habe ich keinen Hinweis gefunden. Aktuell behelfe ich mir indem ich via Excel vor jeder Komponenten-Nr ein "K" setze.
Weiß jemand von euch Rat?

Gruß Sascha
__deets__
User
Beiträge: 14494
Registriert: Mittwoch 14. Oktober 2015, 14:29

Also ich finde in der Dokumentation einen recht deutlichen Hinweis, der es erlaubt, den Datentyp einer jeden Spalte zu bestimmen.
dtypeType name or dict of column -> type, default None
Data type for data or columns. E.g. {‘a’: np.float64, ‘b’: np.int32} Use object to preserve data as stored in Excel and not interpret dtype. If converters are specified, they will be applied INSTEAD of dtype conversion.
MacGruber
User
Beiträge: 63
Registriert: Sonntag 28. Mai 2017, 13:04

Danke __deets__
Leider weiß ich davon jetzt aber immer noch nicht, was von mir erwartet wird. Muss ich jetzt einen Numpy Datentyp verwenden??? Wenn ja; welchen? Ich habe nichts gesehen, dass nach String aussah...
Benutzeravatar
sparrow
User
Beiträge: 4165
Registriert: Freitag 17. April 2009, 10:28

Hier gib es einen super Artikel, den man findet, wenn man nach pandas dtype sucht: https://pbpython.com/pandas_dtypes.html
__deets__
User
Beiträge: 14494
Registriert: Mittwoch 14. Oktober 2015, 14:29

Na wenn es in Excel schon ein String ist, und du object angeben kannst, um das zu erhalten - dann hast du doch alles, was du brauchst. Oder du nimmst eine Konvertier-Funktion, die einfach nix macht.
MacGruber
User
Beiträge: 63
Registriert: Sonntag 28. Mai 2017, 13:04

@Sparrow
Vielen Dank. Dein Tipp war super. Ich habe jetzt den Dtype der Spalte als Object definiert. Das hat den gewünschten Effekt mit sich gebracht.
Der Import sieht jetzt folgender Maßen aus:

Code: Alles auswählen

df=pd.read_excel("5636_TCs.xlsx", dtype={"Komponente":object})
Antworten