Pandas 将时间戳列转换为日期时间

Posted

技术标签:

【中文标题】Pandas 将时间戳列转换为日期时间【英文标题】:Pandas Convert Timestamp Column to Datetime 【发布时间】:2016-10-05 06:43:43 【问题描述】:

鉴于以下数据框和必要的争论:

import pandas as pd
df=pd.DataFrame('A':['a','b','c'],
        'dates':['2015-08-31 00:00:00','2015-08-24 00:00:00','2015-08-25 00:00:00'])
df.dates=df.dates.astype(str)
df['dates'] = pd.to_datetime(df.dates.str.split(',\s*').str[0])
set(df['dates'])

我最终得到:

Timestamp('2015-08-24 00:00:00'),
 Timestamp('2015-08-25 00:00:00'),
 Timestamp('2015-08-31 00:00:00')

我需要将时间戳转换回日期时间(真的,只是日期)格式。

我已经根据this post的答案尝试了这个:

df['dates'].to_pydatetime()

但是返回:

AttributeError: 'Series' object has no attribute 'to_pydatetime'

在我的真实数据中,数据类型是:<M8[ns]

【问题讨论】:

Converting between datetime and Pandas Timestamp objects的可能重复 请参阅编辑后的帖子。我尝试了该帖子中建议的方法,但对我不起作用。 【参考方案1】:

如果您只想从给定的Timestamp 对象中提取日期,则可以通过调用未绑定的Timestamp.date 方法来获取原始datetime.date 对象,如下所示:

import pandas as pd
from pandas import Timestamp, Series, date_range

start = Timestamp('2016-01-01')
stop = Timestamp('2016-01-02')
s = Series(date_range(start, stop, freq = 'H'))

print s[0]
2016-01-01 00:00:00

print s.map(Timestamp.date)[0]
2016-01-01
dtype: object

【讨论】:

【参考方案2】:

您可以使用dt.date 返回一个datetime.date 对象:

In [3]:
set(df['dates'].dt.date)

Out[3]:
datetime.date(2015, 8, 24),
 datetime.date(2015, 8, 25),
 datetime.date(2015, 8, 31)

【讨论】:

这仅从时间戳中提取日期,而不是整个日期时间。【参考方案3】:

我有一个类似的问题,我需要在 numpy 中将时间戳转换为日期时间,但我相信它也可以应用于 Pandas。 我认为使用 Pandas.Timestamp 下的函数会更好地转换时间戳,如下所示。

================================

np1=pd.DataFrame.to_numpy(df2)
print(np1)
[[Timestamp('2019-01-31 00:00:00') 'UCHITEC'  2000 2.56 5129.54]
 [Timestamp('2019-01-16 00:00:00') 'UCHITEC'  1000 2.61 2618.79]]

np2= np.asarray(np1)
Timestamp('2019-01-16 00:00:00')

np3 = pd.Timestamp.to_datetime64(np2[0][0])
np4 = pd.Timestamp.to_pydatetime(np2[1][0])

print(np3)
print(np4)

2019-01-31T00:00:00.000000000
2019-01-16 00:00:00

【讨论】:

【参考方案4】:

您可以直接使用apply进行转换:

df.dates = df.dates.apply(lambda x: x.date())

这会将之前的“日期”(作为时间戳)就地转换为仅截断的“日期时间”部分

【讨论】:

【参考方案5】:

这对我有用。 df['time'] 由一列时间戳组成

df['time'] = df['time'].apply(lambda x: datetime.datetime.fromtimestamp(x).strftime('%Y-%m-%d'))

# i.e. x is a timestamp such as 1641772800 (or in date 2022-01-10)

【讨论】:

以上是关于Pandas 将时间戳列转换为日期时间的主要内容,如果未能解决你的问题,请参考以下文章

将纪元时间戳列转换为带有时区的日期时间

如何将 SQL Server 的时间戳列转换为日期时间格式

Pyspark 将字符串转换为日期时间戳列,包含两种不同的格式

将火花数据帧中的日期时间时间戳转换为 epocTimestamp

如何从 parquet 文件中选择 13 位时间戳列,将其转换为日期并存储为数据框?

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