Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

using time zone in pandas to_datetime

I have time from epochs timestamps I use data.Time_req = pd.to_datetime(data.Time_req) But I get UTC time, I need +5:30 from the given time. How do I tell pandas to use 'IST' timezone or just 5hrs 30 mins further to the time it currently shows me. eg. 7 hrs should become 12:30 hrs and so on.

like image 707
pythonRcpp Avatar asked Mar 16 '17 06:03

pythonRcpp


People also ask

How do I convert UTC time to local time in pandas?

Create a datetime object from the UTC time string. This datetime object will have no timezone associated with it. Convert the timezone of the datetime object to local timezone by calling the astimezone() function on datetime object.

What is UTC true in pandas?

What is UTC true in pandas? If True , the function always returns a timezone-aware UTC-localized Timestamp , Series or DatetimeIndex . To do this, timezone-naive inputs are localized as UTC, while timezone-aware inputs are converted to UTC. If False (default), inputs will not be coerced to UTC.


2 Answers

You can use tz_localize to set the timezone to UTC/+0000, and then tz_convert to add the timezone you want:

start = pd.to_datetime('2015-02-24')
rng = pd.date_range(start, periods=10)

df = pd.DataFrame({'Date': rng, 'a': range(10)})  

df.Date = df.Date.dt.tz_localize('UTC').dt.tz_convert('Asia/Kolkata')
print (df)
                       Date  a
0 2015-02-24 05:30:00+05:30  0
1 2015-02-25 05:30:00+05:30  1
2 2015-02-26 05:30:00+05:30  2
3 2015-02-27 05:30:00+05:30  3
4 2015-02-28 05:30:00+05:30  4
5 2015-03-01 05:30:00+05:30  5
6 2015-03-02 05:30:00+05:30  6
7 2015-03-03 05:30:00+05:30  7
8 2015-03-04 05:30:00+05:30  8
9 2015-03-05 05:30:00+05:30  9

Working with time zones.

If need add Timedelta only:

df.Date = df.Date + pd.Timedelta('05:30:00')
print (df)
                 Date  a
0 2015-02-24 05:30:00  0
1 2015-02-25 05:30:00  1
2 2015-02-26 05:30:00  2
3 2015-02-27 05:30:00  3
4 2015-02-28 05:30:00  4
5 2015-03-01 05:30:00  5
6 2015-03-02 05:30:00  6
7 2015-03-03 05:30:00  7
8 2015-03-04 05:30:00  8
9 2015-03-05 05:30:00  9

NOTE: Adding Timedelta will change the epoch timestamp associated with the datetime object. This may not be desired for many applications.

like image 79
jezrael Avatar answered Oct 19 '22 17:10

jezrael


From unix epoch timestamps

timestamps = [1656285319, 1656285336, 1656285424]

pd.to_datetime(timestamps, unit='s', utc=True).map(lambda x: x.tz_convert('Asia/Kolkata'))

outputs:

DatetimeIndex(['2022-06-27 04:45:19+05:30', '2022-06-27 04:45:36+05:30',
               '2022-06-27 04:47:04+05:30'],
              dtype='datetime64[ns, Asia/Kolkata]', freq=None)

All timezones

import pytz
pytz.all_timezones

full list here

like image 32
iambr Avatar answered Oct 19 '22 16:10

iambr