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

时间:2016-06-05 16:28:55

标签: python-3.x datetime timestamp

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

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]

提前致谢!

4 个答案:

答案 0 :(得分:1)

如果您热衷于仅从给定的Timestamp对象中提取日期,则可以通过调用未绑定的datetime.date方法获取原始Timestamp.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

答案 1 :(得分:1)

您可以使用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)}

答案 2 :(得分:1)

我有一个类似的问题,尽管我需要将时间戳转换为numpy中的datetime,但是我相信它也可以在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

答案 3 :(得分:1)

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

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

这会将以前的“日期”(作为时间戳)原位转换为仅被截断的“日期时间”部分