熊猫date_range从DatetimeIndex到Date格式

Jas*_*pel 8 python 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
Run Code Online (Sandbox Code Playgroud)

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

In  [117] rng[0]
Out [118]
<Timestamp: 2013-01-02 00:00:00>
Run Code Online (Sandbox Code Playgroud)

将以表格形式2013-01-02

我正在使用熊猫0.9.1版

unu*_*tbu 7

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
Run Code Online (Sandbox Code Playgroud)

  • 注意,您可以直接从Timestamp对象应用strftime,例如`rng.map(lambda t:t.strftime('%Y-%m-%d'))`。 (4认同)

mmn*_*eco 5

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

熊猫版: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
Run Code Online (Sandbox Code Playgroud)