dataframe dtype object umwandeln

mit matplotlib, NumPy, pandas, SciPy, SymPy und weiteren mathematischen Programmbibliotheken.
Antworten
SautaRoc
User
Beiträge: 48
Registriert: Donnerstag 20. September 2018, 13:18

Hallo,

ich habe per

Code: Alles auswählen

df = pd.read_html …….
eine Tabelle in ein Dataframe gelesen.
Wenn ich dann per:

Code: Alles auswählen

print(df.dtypes)
[88 rows x 9 columns]
Basis object
Anzahl int64
dtype: object

die Typen auslese, ergibt sich, dass eine Spalte (Basis) die Zahlen enthält, als object definiert ist.
Die Zahlen sind folgendermassen dargestellt:
  • 8200.00
  • 8400.00
usw.
ich bräuchte diese Zahlen als Integer, also
  • 8200
  • 8400
direkt scheint es nicht zu gehen. Könnte mir jemand einen Tipp für einen Lösungsweg geben?

Vielen Dank
Benutzeravatar
__blackjack__
User
Beiträge: 13003
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@SautaRoc: Die Frage ist warum die als `object` definiert sind. Da muss ja irgendwas in der Spalte sein was nicht in eine Zahl umwandelbar ist.
“Most people find the concept of programming obvious, but the doing impossible.” — Alan J. Perlis
SautaRoc
User
Beiträge: 48
Registriert: Donnerstag 20. September 2018, 13:18

gut, das ist vermutlich das '.00' wobei das einfach die amerikanische Schreibweise ist - also eigentlich wäre das bereits eine Zahl. Demzufolge muss dieser Teil weggeknappst werden?
Benutzeravatar
__blackjack__
User
Beiträge: 13003
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@SautaRoc: Eher nicht, es sei denn Du hast ansonsten Kommas für Nachkommastellen in der Tabelle und beim erkennen. Da ist viel wahrscheinlicher irgendwas in der Spalte das *gar nicht* in eine Zahl umgewandelt werden kann. Das kann man aber ohne mehr Code und Daten zu sehen nicht sagen. Kannst Du die Spalte, also das `Series`-Objekt denn mit ``.astype(float)`` ohne Fehlermeldung umwandeln?
“Most people find the concept of programming obvious, but the doing impossible.” — Alan J. Perlis
SautaRoc
User
Beiträge: 48
Registriert: Donnerstag 20. September 2018, 13:18

danke für die Tipps!

folgendes hat funktioniert:

Code: Alles auswählen

df['Basis'] = df.Basis.astype(float).astype(int)
Es musste also zunächst der object-typ in float umgewandelt werden, um dann ein integer daraus zu erzeugen.
Benutzeravatar
__blackjack__
User
Beiträge: 13003
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@SautaRoc: Das ist aber immer noch etwas mysteriös warum das nicht schon beim einlesen passiert ist, also zumindest das der Datentyp als Gleitkommazahl erkannt wurde.
“Most people find the concept of programming obvious, but the doing impossible.” — Alan J. Perlis
Antworten