将DatetimeIndex的Pandas date_range转换为日期格式

17

Pandas date_range 返回一个 pandas.DatetimeIndex,其中索引格式化为时间戳(日期加时间)。例如:

In  [114] rng=pandas.date_range('1/1/2013','1/31/2013',freq='D')
In  [115] rng
Out [116]
<class 'pandas.tseries.index.DatetimeIndex'>
[2013-01-01 00:00:00, ..., 2013-01-31 00:00:00]
Length: 31, Freq: D, Timezone: None

鉴于我在应用程序中未使用时间戳,我想将此索引转换为日期,以便:

In  [117] rng[0]
Out [118]
<Timestamp: 2013-01-02 00:00:00>

将以2013-01-02的形式呈现。

我正在使用pandas版本0.9.1


1
在“Timestamp”对象中没有“Datestamp”的类似物。如果您正在使用pandas进行更进一步的分析,最好将这些日期保留为“Timestamp”,并忽略零值。如果您想要提取它们以进行输出或显示,“@unutbu”的解决方案是正确的方法。 - Dan Allan
是的,为什么你不使用时间戳? - Andy Hayden
我正在将结果打印到电子表格中,然后将其用作访问数据库的输入。由于零值,访问数据库出现了故障。 - Jason Strimpel
你可以使用 period_range 函数,但我不确定在电子表格中的格式。 - bmu
2个回答

18

对我来说,当前的答案不令人满意,因为它在内部仍以小时、分钟、秒的时间戳形式存储。

Pandas版本:0.22.0

我的解决方案是将其转换为datetime.date

In[30]: import pandas as pd
In[31]: rng = pd.date_range('1/1/2013','1/31/2013', freq='D')
In[32]: date_rng = rng.date   # Here it becomes date
In[33]: date_rng[0]
Out[33]: datetime.date(2013, 1, 1)
In[34]: print(date_rng[0])
2013-01-01

文档链接:https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.DatetimeIndex.date.html#pandas.DatetimeIndex.date - supermitch

15

to_pydatetime 返回一个由Python datetime.datetime对象组成的NumPy数组:

In [8]: dates = rng.to_pydatetime()

In [9]: print(dates[0])
2013-01-01 00:00:00

In [10]: print(dates[0].strftime('%Y-%m-%d'))
2013-01-01

5
请注意,您可以直接从时间戳对象应用strftime,例如 rng.map(lambda t: t.strftime('%Y-%m-%d')) - Andy Hayden

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接