将datetime64转换为datetime.date对象

0 投票
1 回答
2798 浏览
提问于 2025-04-18 09:46

我创建了一个数据框,其中有一列是用来表示日历日期的系列数据,使用了

start = datetime.date(2008, 8, 01)
end = datetime.date(2009, 1, 19)
range = pd.date_range(start, end, freq = 'D')
df = pd.DataFrame({'date': pd.Series(range)})

这样做后,我发现日期这一列的类型变成了datetime64[ns],虽然我是用datetime.date来创建这些日期的。我查了一些问题,但没有找到有用的答案。

我该如何把这个数据框中日期列的类型转换成日期对象呢?

1 个回答

1

date_range 确实会返回一种叫做 datetime64 的时间格式,不管你是怎么指定开始和结束时间的(比如你也可以用字符串来表示)。
如果你想把 datetime64 的值转换成 datetime.date 对象,可以使用 DatetimeIndex 的 .date 访问器(date_range 返回的就是这种索引):

In [22]: s = pd.Series(range.date)

In [23]: s
Out[23]:
0     2008-08-01
1     2008-08-02
2     2008-08-03
3     2008-08-04
4     2008-08-05
...
167    2009-01-15
168    2009-01-16
169    2009-01-17
170    2009-01-18
171    2009-01-19
Length: 172, dtype: object

In [24]: s[0]
Out[24]: datetime.date(2008, 8, 1)

想了解这些时间日期组件的详细信息,可以查看这里的文档:http://pandas.pydata.org/pandas-docs/stable/timeseries.html#time-date-components。如果你想把它转换成 datetime.datetime 对象,可以使用 range.to_pydatetime()

不过,正如 U2EF1 所说,根据你的应用场景,可能你会需要这种 datetime64 的值,因为用它进行操作会更快。

撰写回答