如何从datetime对象中仅提取月份和日期?

时间:2016-11-22 05:32:22

标签: python datetime pandas matplotlib strptime

我试图做一个散点图,我的x轴需要是一年中的每一天。 我首先在数据文件中读取并获取日期列,其中填充了整数,例如19800801.所以我将此integer转换为datetime,写成:

datetimes_0 = datetime.strptime(str(dates_pitts[0]), '%Y%m%d')

然后我想通过写:

从datetime对象中仅提取月和日
s = datetimes_0.strftime("%m%d")

我意识到他们从strftime返回的值不再是日期时间对象,所以我尝试通过执行将其转换回datetime对象

s0= datetime.strptime(s, '%m%d')

但不是只给我一个月和一天,而是让我回到了整年,一个月和一天。 我的问题是如何从给定的整数(例如19800801)中提取只有月和日(两者)的日期时间对象?

2 个答案:

答案 0 :(得分:9)

如果您尝试在matplotlib中绘制基于时间的数据,通常的方法是首先将日期转换为datatime个对象,然后使用mat {来获取matplotlib将其转换为自己的内部表示形式{{ 3}}功能。接下来,您可以告诉matplotlib如何使用格式化程序格式化x轴上的任何刻度,在本例中为date2num()。因此,您可以选择显示每个刻度的月和日。

在此示例中,我显示月份,下面一行显示日期:

from matplotlib import pyplot, dates
from datetime import datetime

data = [("19800801", 16), ("19800810", 10), ("19800901", 15), ("19800905", 14)]

xaxis = [datetime.strptime(d, '%Y%m%d') for d, v in data]
yaxis = [v for d, v in data]

ax = pyplot.gca()
xaxis = dates.date2num(xaxis)    # Convert to maplotlib format
hfmt = dates.DateFormatter('%m\n%d')
ax.xaxis.set_major_formatter(hfmt)

pyplot.xlabel('Date')
pyplot.ylabel('Value')
pyplot.plot(xaxis, yaxis)
pyplot.tight_layout()

pyplot.show()

这将显示如下:

DateFormatter()

然后你可以扩展它以使用DayLocator()告诉matplotlib将xticks放在确切的日期位置,如下所示:

ax.xaxis.set_major_locator(dates.DayLocator())

给你:

month day xaxis matplotlib demo

答案 1 :(得分:7)

这将采用一个整数(假设它是一个有效的纪元)并将其转换为python datetime对象:

>>> import datetime
>>> date = datetime.datetime.fromtimestamp(19800801)
>>> print date.month
8
>>> print date.day
17

或使用strftime(返回字符串而不是datetime对象):

>>> datetime.datetime.fromtimestamp(19800801).strftime('%m%d')
'0817'

将月份和日期输出为单个整数:

>>> int(datetime.datetime.fromtimestamp(19800801).strftime('%m%d'))
817