I have a dataframe with a DataTime column (with Timezone in different formats). It appears like timezone is UTC but I want to convert the column to pd.to_datetime
and that is failing. That is problem #1. Since that fails I cannot do any datetime operations on the time period such as group the column by date / figure out the days / group by hour of the day and so on. Here's my dataframe df_res
DateTime
2017-11-02 19:49:28-07:00
2017-11-27 07:32:22-08:00
2017-12-27 17:01:15-08:00
OUTPUT for the command
df_res["DateTime"] = df_res["DateTime"].dt.tz_convert('America/New_York')
AttributeError: Can only use .dt accessor with datetimelike values
WHen I convert to datetime
df_res['DateTime'] = pd.to_datetime(df_res['DateTime'])
ValueError: Tz-aware datetime.datetime cannot be converted to datetime64 unless utc=True
I feel I am going around in circles. I need to convert the column to datetime in order to perform operations & in order to do that I need to have them all the same timezone but I cannot have the same timezone unless it is a datetime object so how can I best approach this. I did refer to previous postings but they seem to convert to datetime as easily as possible:
Convert datetime columns to a different timezone pandas Convert pandas timezone-aware DateTimeIndex to naive timestamp, but in certain timezone
The tz_convert() function is used to convert tz-aware Datetime Array/Index from one time zone to another. Time zone for time. Corresponding timestamps would be converted to this time zone of the Datetime Array/Index. A tz of None will convert to UTC and remove the timezone information.
Use the datetime. astimezone() method to convert the datetime from one timezone to another. This method uses an instance of the datetime object and returns a new datetime of a given timezone.
I think that it is not necessary to apply lambdas:
df_res['DateTime'] = pd.to_datetime(df_res['DateTime'], utc=True)
documentation: https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.to_datetime.html
You can check this:
df = pd.DataFrame({
'time': [
'2017-11-02 19:49:28-08:00',
'2017-11-27 07:32:22-07:00',
'2017-12-27 17:01:15-07:00'
]
})
df['time'] = pd.to_datetime(df['time'])
df['time'].apply(lambda x: pd.to_datetime(x).tz_localize('US/Eastern'))
0 2017-11-03 03:49:28-04:00
1 2017-11-27 14:32:22-05:00
2 2017-12-28 00:01:15-05:00
Name: time, dtype: datetime64[ns, US/Eastern]
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With