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: 13068
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.
„All religions are the same: religion is basically guilt, with different holidays.” — Cathy Ladman
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: 13068
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?
„All religions are the same: religion is basically guilt, with different holidays.” — Cathy Ladman
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: 13068
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.
„All religions are the same: religion is basically guilt, with different holidays.” — Cathy Ladman
Antworten