How do I convert timestamp to datetime.date in pandas dataframe?

Posted on

Question :

How do I convert timestamp to datetime.date in pandas dataframe?

I need to merge 2 pandas dataframes together on dates, but they currently have different date types. 1 is timestamp (imported from excel) and the other is datetime.date.

Any advice?

I’ve tried pd.to_datetime().date but this only works on a single item(e.g. df.ix[0,0]), it won’t let me apply to the entire series (e.g. df['mydates']) or the dataframe.

Asked By: Afo B

||

Answer #1:

I got some help from a colleague.

This appears to solve the problem posted above

pd.to_datetime(df['mydates']).apply(lambda x: x.date())

Answered By: Afo B

Answer #2:

Much simpler than above:

df['mydates'].dt.date
Answered By: rrichter

Answer #3:

For me this works:

from datetime import datetime
df[ts] = [datetime.fromtimestamp(x) for x in df[ts]]
Answered By: Saxasmu

Answer #4:

Another question was marked as dupe pointing to this, but it didn’t include this answer, which seems the most straightforward (perhaps this method did not yet exist when this question was posted/answered):

The pandas doc shows a pandas.Timestamp.to_pydatetime method to “Convert a Timestamp object to a native Python datetime object”.

Answered By: codingatty

Answer #5:

If you need the datetime.date objects… then get them through with the .date attribute of the Timestamp

pd.to_datetime(df['mydates']).date
Answered By: piRSquared

Answer #6:

I found the following to be the most effective, when I ran into a similar issue. For instance, with the dataframe df with a series of timestmaps in column ts.

df.ts.apply(lambda x: pd.datetime.fromtimestamp(x).date())

This makes the conversion, you can leave out the .date() suffix for datetimes. Then to alter the column on the dataframe. Like so…

df.loc[:, 'ts'] = df.ts.apply(lambda x: pd.datetime.fromtimestamp(x).date())
Answered By: BrotherJack

Answer #7:

Assume time column is in timestamp integer msec format

1 day = 86400000 ms

Here you go:

day_divider = 86400000

df['time'] = df['time'].values.astype(dtype='datetime64[ms]') # for msec format

df['time'] = (df['time']/day_divider).values.astype(dtype='datetime64[D]') # for day format
Answered By: Alperen Sözer

Leave a Reply

Your email address will not be published.