【问题标题】:Pandas corrupting datetime object熊猫破坏日期时间对象
【发布时间】:2018-05-29 01:40:21
【问题描述】:

我正在尝试在 pandas DataFrame 中创建时区感知日期列。当我运行下面的代码时,生成的 pandas 列与我输入的日期时间不同。我在这里做错了什么?

我正在使用 python 3.6.2 和 pandas 0.20.3

from datetime import datetime
import pandas as pd
import pytz 
date_string = "12/14/2016 12:00"
timezone = pytz.timezone("US/Pacific")
input_datetime =  datetime.strptime(date_string, "%m/%d/%Y %H:%M").replace(tzinfo=timezone)
df = pd.DataFrame({"datetime":[input_datetime]})

如果我运行该代码,df['datetime'][0].minute 返回 53input_datetime.minute 返回 0

当我不更换 tzinfo 时,我没有问题。

【问题讨论】:

  • 发布您的实际代码,而不是屏幕截图。也看看this link
  • 改变是什么意思?是因为你打电话给x 的分钟数是10/5/16 0:00
  • @JosephK。 datetime.datetime(2016, 12, 14, 12, 0, tzinfo=<DstTzInfo 'US/Pacific' LMT-1 day, 16:07:00 STD>) 在我创建 pandas DataFrame 后变为 Timestamp('2016-12-14 11:53:00-0800', tz='US/Pacific')

标签: python pandas datetime pytz


【解决方案1】:

如果您首先转换您的 input_datetime,您可以使用 .dt.minute 调用数据帧的分钟(或年等)

input_datetime = pd.to_datetime(datetime.strptime(date_string, 
                                                  "%m/%d/%Y %H:%M")).replace(tzinfo=timezone)


df = pd.DataFrame({"datetime":[input_datetime]})
df['datetime'].dt.minute

【讨论】:

    【解决方案2】:

    您可以使用熊猫.dttz_localize

    from datetime import datetime
    import pandas as pd
    date_string = "12/14/2016 12:00"
    df = pd.DataFrame({'datetime':[datetime.strptime(date_string, "%m/%d/%Y %H:%M")]})
    df['datetime'].dt.tz_localize('US/Pacific')
    

    输出:

    0   2016-12-14 12:00:00-08:00
    Name: datetime, dtype: datetime64[ns, US/Pacific]
    

    【讨论】:

      猜你喜欢
      • 2014-07-17
      • 2021-12-29
      • 2019-03-24
      • 1970-01-01
      • 2016-07-05
      • 2019-07-19
      • 2022-10-12
      • 2021-08-30
      • 2018-04-19
      相关资源
      最近更新 更多