dataframe dtype object umwandeln

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

Mittwoch 3. Oktober 2018, 21:40

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: 1415
Registriert: Samstag 2. Juni 2018, 10:21

Mittwoch 3. Oktober 2018, 22:50

@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.

Code: Alles auswählen

    **** COMMODORE 64 BASIC V2 ****
 64K RAM SYSTEM  38911 BASIC BYTES FREE
   CYBERPUNX RETRO REPLAY 64KB - 3.8P
READY.
█
SautaRoc
User
Beiträge: 29
Registriert: Donnerstag 20. September 2018, 13:18

Mittwoch 3. Oktober 2018, 23:48

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: 1415
Registriert: Samstag 2. Juni 2018, 10:21

Donnerstag 4. Oktober 2018, 00:18

@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?

Code: Alles auswählen

    **** COMMODORE 64 BASIC V2 ****
 64K RAM SYSTEM  38911 BASIC BYTES FREE
   CYBERPUNX RETRO REPLAY 64KB - 3.8P
READY.
█
SautaRoc
User
Beiträge: 29
Registriert: Donnerstag 20. September 2018, 13:18

Donnerstag 4. Oktober 2018, 09:57

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: 1415
Registriert: Samstag 2. Juni 2018, 10:21

Donnerstag 4. Oktober 2018, 10:15

@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.

Code: Alles auswählen

    **** COMMODORE 64 BASIC V2 ****
 64K RAM SYSTEM  38911 BASIC BYTES FREE
   CYBERPUNX RETRO REPLAY 64KB - 3.8P
READY.
█
Antworten