熊猫:将时间戳转换为 datetime.date

Posted

技术标签:

【中文标题】熊猫:将时间戳转换为 datetime.date【英文标题】:Pandas: Convert Timestamp to 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)

【问题讨论】:

另请参阅 datetime 的相关问题:***.com/questions/13703720/… 【参考方案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)

【讨论】:

以上是关于熊猫:将时间戳转换为 datetime.date的主要内容,如果未能解决你的问题,请参考以下文章

熊猫数据框索引 datetime.date 转换为对象 KeyError

将UTC时间戳转换为熊猫中的本地时区问题

将熊猫系列时间戳转换为唯一日期列表

我找不到将熊猫时间戳转换为 matplotlib 图的日期的方法

在熊猫中将时间戳转换为to_date

更改熊猫中日期时间列的时区并添加为分层索引