如何将大熊猫中的datetime列都转换为相同的时区

时间:2019-03-27 19:57:39

标签: python pandas datetime type-conversion timezone

我有一个带有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

2 个答案:

答案 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]