Dataframe timestamp loswerden

Installation und Anwendung von Datenbankschnittstellen wie SQLite, PostgreSQL, MySQL, der DB-API 2.0 und sonstigen Datenbanksystemen.
Antworten
Gerhardus
User
Beiträge: 30
Registriert: Dienstag 31. Dezember 2013, 01:59

Montag 29. Juni 2020, 20:04

Hallo,
ich kämpfe seit längerem Timestamp aus meinem df loszuwerden.
Daten kommen aus excel um sie mit pd.read_excel in einer sqlite db zu speichern.

Code: Alles auswählen

 dfs = pd.read_excel('HV_Test_2018.xlsx',header=3)
Mit

Code: Alles auswählen

dfs['Buchungsdatum'].dt.strftime("%d.%m.%Y") 

habe nach langem suchen und testen die codezeile gefunden, die mir endlich die Zeit nicht mehr anzeigt. Wie kann ich das Ergebnis im df ersetzen? Versuche mit apply, map, lambda führten nicht zum Erfolg.
Kann mir wer helfen?
Gruß Gerhardus
Benutzeravatar
__blackjack__
User
Beiträge: 6366
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

Montag 29. Juni 2020, 21:20

@Gerhardus: Also erst einmal ist das der falsche Weg aus einem `datetime` oder dem Pandas-Äquivalent eine Zeichenkette zu machen. Das sollte ein Datum bleiben. Und als Zeichenkette zum Einfügen in SQLite hat das als Zeichenkette auch die falsche Form. Das müsste "%Y-%m-%d" sein, damit man das da auch als Datumstyp wieder heraus bekommen kann.

Aber wie gesagt, Zeichenkette ist falsch. Du suchst ``dfs["Buchungsdatum"].dt.date``. Und das musst Du dann einfach der Spalte wieder zuweisen: ``dfs["Buchungsdatum"] = ...``.
long long ago; /* in a galaxy far far away */
Gerhardus
User
Beiträge: 30
Registriert: Dienstag 31. Dezember 2013, 01:59

Montag 29. Juni 2020, 22:42

Danke für die Aufklärung, das %Y-%m-%d format würde mich weniger stören, den Zeitteil '2018-01-03 00:00:00' würde ich gerne loswerden, dass müsste doch möglich sein, halt in der sqlitedb oder ?

LG Gerhardus
Benutzeravatar
__blackjack__
User
Beiträge: 6366
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

Montag 29. Juni 2020, 23:21

@Gerhardus: Ich habe doch beschrieben wie man den Zeitteil los wird: in dem man aus dem`datetime` ein `date` macht.

Code: Alles auswählen

In [106]: pd.Series([now])                                                      
Out[106]: 
0   2020-06-29 22:18:54.189720
dtype: datetime64[ns]

In [107]: pd.Series([now]).dt.date                                              
Out[107]: 
0    2020-06-29
dtype: object
long long ago; /* in a galaxy far far away */
Gerhardus
User
Beiträge: 30
Registriert: Dienstag 31. Dezember 2013, 01:59

Dienstag 30. Juni 2020, 09:43

@_blackjack_
Sorry, war im glauben, das sich das nur auf das df bezieht. Habe offensichtlich die Formatierung und den Datumstyp
durcheinander gebracht. Bin endlich in sqlite über sqlalchemy zeitlos. :)

Gruß Gerhardus
Antworten