Jana Stará
Jana Stará

Reputation: 73

Comparison between datetime64[ns] and date

I have DataFrame with values looks like this

    Date        Value 
1   2020-04-12  A
2   2020-05-12  B   
3   2020-07-12  C   
4   2020-10-12  D
5   2020-11-12  E

and I need to create new DataFrame only with dates from today (7.12) to future (in this example only rows 3, 4 and 5).

I use this code:

df1= df[df["Date"] >= date.today()]

but it gives me TypeError: Invalid comparison between dtype=datetime64[ns] and date

What am I doing wrong? Thank you!

Upvotes: 6

Views: 17868

Answers (2)

RavinderSingh13
RavinderSingh13

Reputation: 133518

Could you please try following. This considers that your dates are in YYYY-DD-MM format, in case its other format then one could change date format accordingly in strftime function.

import pandas as pd
today=pd.datetime.today().strftime("%Y-%d-%m")
df.loc[df['Date'] >= today]

Sample run of solution above: Let's say we have following test DataFrame.

    Date        Value 
1   2020-04-12  A
2   2020-05-12  B   
3   2020-07-12  C   
4   2020-11-12  D
5   2020-12-12  E

Now when we run the solution above we will get following output:

      Date   Value
3   2020-07-12  C   
4   2020-11-12  D
5   2020-12-12  E

Upvotes: 1

Niels Henkens
Niels Henkens

Reputation: 2696

Use the .dt.date on the df['Date'] column. Then you are comparing dates with dates. So:

df1 = df.loc[df['Date'].dt.date >= date.today()]

This will give you:

        Date Value
3 2020-12-07     C
4 2020-12-10     D
5 2020-12-11     E

Also make sure that your dateformat is actualy correct. For example by print df['Date'].dt.month to see that it gives all 12's. If not, your date string is not converted correctly. In that case, use df['Date'] = pd.to_datetime(df['Date'], format="%Y-%d-%m") to convert the Date column to the correct datetime format after creating the DataFrame.

Upvotes: 8

Related Questions