我有一个带有DataTime列的数据框(时区的格式不同)。好像时区是UTC,但是我想将列转换为pd.to_datetime
,但是失败了。那就是问题1。由于失败了,因此我无法在该时间段上执行任何datetime操作,例如按日期分组列/确定日期/按小时分组等等。这是我的数据框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
命令的输出
df_res["DateTime"] = df_res["DateTime"].dt.tz_convert('America/New_York')
AttributeError: Can only use .dt accessor with datetimelike values
我会转换为datetime
df_res['DateTime'] = pd.to_datetime(df_res['DateTime'])
ValueError: Tz-aware datetime.datetime cannot be converted to datetime64 unless utc=True
我觉得我正在转圈。为了执行操作,我需要将列转换为日期时间,并且为了做到这一点,我需要使它们全部具有相同的时区,但是除非具有日期时间对象,否则我就不能具有相同的时区,因此,如何最好地实现这一点。 我确实提到了以前的帖子,但它们似乎尽可能容易地转换为日期时间:
Convert datetime columns to a different timezone pandas Convert pandas timezone-aware DateTimeIndex to naive timestamp, but in certain timezone
答案 0 :(得分:5)
我认为没有必要应用lambda:
df_res['DateTime'] = pd.to_datetime(df_res['DateTime'], utc=True)
文档:https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.to_datetime.html
答案 1 :(得分:1)
您可以检查以下内容:
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]