【问题标题】:Pandas: Convert Timestamp to datetime.date熊猫:将时间戳转换为 datetime.date
【发布时间】:2016-03-27 00:00:38
【问题描述】:

我有一个包含时间戳数据的 pandas 列

In [27]: train["Original_Quote_Date"][6] 
Out[27]: Timestamp('2013-12-25 00:00:00')

如何检查这些对象与 datetime.date 类型的对象的等价性

datetime.date(2013, 12, 25)

【问题讨论】:

标签: python datetime pandas timestamp


【解决方案1】:

所以,这是从 IBM coursera 教程中获得的。

data['date'] = data['TimeStamp'].apply(lambda d: datetime.date.fromtimestamp(d/1000.0))

【讨论】:

    【解决方案2】:

    假设时间列是时间戳整数毫秒格式

    1 天 = 86400000 毫秒

    给你:

    day_divider = 86400000
    
    df['time'] = df['time'].values.astype(dtype='datetime64[ms]') # for msec format
    
    df['time'] = (df['time']/day_divider).values.astype(dtype='datetime64[D]') # for day format
    

    【讨论】:

      【解决方案3】:

      从 pandas 0.20.3 开始,使用 .to_pydatetime() 将任何 pandas.DateTimeIndex 实例转换为 Python datetime.datetime

      【讨论】:

      • 值得注意的是,对于大型 DatetimeIndex,这可能会很慢/占用大量内存。这是因为 DatetimeIndex 基本上只是对 int64 数组的轻包装,而 python 日期时间数组是成熟的 python 对象数组/布局不紧凑。
      【解决方案4】:

      使用.date 方法:

      In [11]: t = pd.Timestamp('2013-12-25 00:00:00')
      
      In [12]: t.date()
      Out[12]: datetime.date(2013, 12, 25)
      
      In [13]: t.date() == datetime.date(2013, 12, 25)
      Out[13]: True
      

      要与 DatetimeIndex(即时间戳数组)进行比较,您需要反过来:

      In [21]: pd.Timestamp(datetime.date(2013, 12, 25))
      Out[21]: Timestamp('2013-12-25 00:00:00')
      
      In [22]: ts = pd.DatetimeIndex([t])
      
      In [23]: ts == pd.Timestamp(datetime.date(2013, 12, 25))
      Out[23]: array([ True], dtype=bool)
      

      【讨论】:

      • 对于整个列或系列,只需将其与 apply 方法和 lambda 结合使用。例如,如果 t 是一系列时间戳: t.apply(lambda x: x.date())
      • 值得一提的是时间部分丢失,只保留日期部分。对于那些需要保持时间的人,请使用 Xavier Ho 提到的.to_pydatetime()
      • 有一个相应的.time() 方法可以删除日期并只返回datetime.time 组件
      【解决方案5】:

      您可以像这样将 datetime.date 对象转换为 pandas Timestamp:

      #!/usr/bin/env python3
      # coding: utf-8
      
      import pandas as pd
      import datetime
      
      # create a datetime data object
      d_time = datetime.date(2010, 11, 12)
      
      # create a pandas Timestamp object
      t_stamp = pd.to_datetime('2010/11/12')
      
      # cast `datetime_timestamp` as Timestamp object and compare
      d_time2t_stamp = pd.to_datetime(d_time)
      
      # print to double check
      print(d_time)
      print(t_stamp)
      print(d_time2t_stamp)
      
      # since the conversion succeds this prints `True`
      print(d_time2t_stamp == t_stamp)
      

      【讨论】:

        猜你喜欢
        • 2020-12-06
        • 1970-01-01
        • 2019-04-26
        • 2021-09-23
        • 2017-12-12
        • 2018-09-23
        • 2012-02-05
        • 2020-04-16
        相关资源
        最近更新 更多