Datumsfilter mit Excel-Tabelle

mit matplotlib, NumPy, pandas, SciPy, SymPy und weiteren mathematischen Programmbibliotheken.
Antworten
Seppel90
User
Beiträge: 25
Registriert: Mittwoch 3. Februar 2021, 13:28

Hallo Zusammen,
ich möchte gerne mit Python einen Datumsbereich mit den jeweiligen Werten abfragen allerdings brauche ich dabei Hilfe.

Die erste Sache ( wo ich auch schon das Problem vermute...) So sieht die Excel Tabelle aus welche als Ursprung gilt:

Bild


Und so der df:

Bild

Wie man sieht ist das Datumsformat im eingelesenen df anders als in der excel Tabelle. Und ich danke da liegt das Problem.

Denn wenn ich versuche mit "datetime" zu arbeiten kommt folgende Meldung:

Code: Alles auswählen

import pandas as pd
import datetime

df_da = pd.read_excel("Datum_Test.xlsx",
                        header=0)

df_da[(df_da['Meldung\nDatum'] > '2020-01-01') & (df_da['Meldung\nDatum'] < '2020-02-01')]
Meldung: TypeError: '>' not supported between instances of 'datetime.datetime' and 'str'


Bei meinen Versuchen dann alles passend zu konvertieren stoße ich nur auf verschiedene Fehlermeldungen.

Vielen dank im Voraus für Ratschläge. :D

Gruß
Sirius3
User
Beiträge: 17703
Registriert: Sonntag 21. Oktober 2012, 17:20

Du vergleichst ja gar nicht mit einem datetime, sondern mit einem String.

Code: Alles auswählen

df_da[(df_da['Meldung\nDatum'] > datetime.datetime(2020, 1, 1)) & (df_da['Meldung\nDatum'] < datetime.datetime(2020, 2, 1))]
Seppel90
User
Beiträge: 25
Registriert: Mittwoch 3. Februar 2021, 13:28

Das macht Sin..... aber auch dein Vorschlag führt zur selben Meldung.

Fehler: TypeError: '>' not supported between instances of 'str' and 'datetime.datetime'


Muss ich die Spalte vorher in ein Format umwandeln was mit datetime komatibel ist?

Sirius3 hat geschrieben: Mittwoch 14. April 2021, 13:48 Du vergleichst ja gar nicht mit einem datetime, sondern mit einem String.

Code: Alles auswählen

df_da[(df_da['Meldung\nDatum'] > datetime.datetime(2020, 1, 1)) & (df_da['Meldung\nDatum'] < datetime.datetime(2020, 2, 1))]
[/quote]
Sirius3
User
Beiträge: 17703
Registriert: Sonntag 21. Oktober 2012, 17:20

Welchen Typ hat denn die Datumsspalte?
Die Fehlermeldungen weichen nämlich voneinander ab.
Zuerst hattest Du
TypeError: '>' not supported between instances of 'datetime.datetime' and 'str'
und jetzt angeblich
TypeError: '>' not supported between instances of 'str' and 'datetime.datetime'
Du hast also mehr geändert, als Du hier zeigst.
Seppel90
User
Beiträge: 25
Registriert: Mittwoch 3. Februar 2021, 13:28

Sirius3 hat geschrieben: Mittwoch 14. April 2021, 15:01 Welchen Typ hat denn die Datumsspalte?
Die Fehlermeldungen weichen nämlich voneinander ab.
Zuerst hattest Du
TypeError: '>' not supported between instances of 'datetime.datetime' and 'str'
und jetzt angeblich
TypeError: '>' not supported between instances of 'str' and 'datetime.datetime'
Du hast also mehr geändert, als Du hier zeigst.

Code: Alles auswählen

import pandas as pd
import datetime

df_da = pd.read_excel("Datum_Test.xlsx",
                        header=0)

df_da[(df_da['Meldung\nDatum'] > datetime.datetime(2020, 1, 1)) & (df_da['Meldung\nDatum'] < datetime.datetime(2020, 2, 1))]
Ich habe nur deine Codezeile eingefügt. :D

Das Format in der Excel Tabelle ist folgendes:

Bild
Sirius3
User
Beiträge: 17703
Registriert: Sonntag 21. Oktober 2012, 17:20

Ich wollte den Typ der Spalte des Pandas-Dataframes wissen.
Es scheint irgendwo eine Zeile zu geben, die kein Datum ist.
Seppel90
User
Beiträge: 25
Registriert: Mittwoch 3. Februar 2021, 13:28

Sirius3 hat geschrieben: Donnerstag 15. April 2021, 09:56 Ich wollte den Typ der Spalte des Pandas-Dataframes wissen.
Es scheint irgendwo eine Zeile zu geben, die kein Datum ist.

Code: Alles auswählen

:


import pandas as pd
import datetime
​
df_da = pd.read_excel("Datum_Test.xlsx",
                        header=0)
​
print(df_da.columns)
type(df_da.columns)
#df_da[(df_da['Meldung\nDatum'] > datetime.datetime(2020, 1, 1)) & (df_da['Meldung\nDatum'] < datetime.datetime(2020, 2, 1))]
Index(['Anwender', 'Meldung\nDatum', 'Grund'], dtype='object')
pandas.core.indexes.base.Index



Sorry.... :D Da habe ich dich falsch verstanden. Ich hoffe es ist das was du brauchst.
Sirius3
User
Beiträge: 17703
Registriert: Sonntag 21. Oktober 2012, 17:20

Nein, ich meinte nicht, welchen Typ die Eigenschaft columns hat, sondern welchen Typ die Spalte "Meldung\nDatum" hat.

Code: Alles auswählen

df_da['Meldung\nDatum'].dtype
Und wahrscheinlich ist die vom Typ object, weil es mindestens eine Zeile gibt, in der kein Datum steht.
Seppel90
User
Beiträge: 25
Registriert: Mittwoch 3. Februar 2021, 13:28

Sirius3 hat geschrieben: Donnerstag 15. April 2021, 13:45 Nein, ich meinte nicht, welchen Typ die Eigenschaft columns hat, sondern welchen Typ die Spalte "Meldung\nDatum" hat.

Code: Alles auswählen

df_da['Meldung\nDatum'].dtype
Und wahrscheinlich ist die vom Typ object, weil es mindestens eine Zeile gibt, in der kein Datum steht.
Achso.... :lol:

Ja du hast recht es handelt sich hie rum ein "object".

Gibt es denn eine Möglichkeit trotzdem nach Datum zu filtern? oder muss ich dann vorher mit einem anderen Befehl den Datentyp ändern?
Sirius3
User
Beiträge: 17703
Registriert: Sonntag 21. Oktober 2012, 17:20

Du mußt halt herausfinden, warum das kein Datum ist.
Seppel90
User
Beiträge: 25
Registriert: Mittwoch 3. Februar 2021, 13:28

Sirius3 hat geschrieben: Donnerstag 15. April 2021, 14:03 Du mußt halt herausfinden, warum das kein Datum ist.
Habe den Fehler gefunden ein "," statt ein Punkt :roll:

Vielen Dank noch mal Sirius3
Antworten