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

Can*_*ang 4 python datetime matplotlib strptime pandas

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

datetimes_0 = datetime.strptime(str(dates_pitts[0]), '%Y%m%d')
Run Code Online (Sandbox Code Playgroud)

然后我想通过编写以下内容从datetime对象中仅提取月份和日期:

s = datetimes_0.strftime("%m%d")
Run Code Online (Sandbox Code Playgroud)

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

s0= datetime.strptime(s, '%m%d')
Run Code Online (Sandbox Code Playgroud)

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

Mar*_*ans 9

如果您尝试在matplotlib中绘制基于时间的数据,通常的方法是首先将日期转换为datatime对象,然后使用matplotlib将这些值转换为使用该date2num()函数的内部表示.接下来,您可以告诉matplotlib如何使用格式化程序格式化x轴上的任何刻度,在本例中为a DateFormatter().因此,您可以选择显示每个刻度的月和日.

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

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

这将显示如下:

月份日xaxis matplotlib演示

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

ax.xaxis.set_major_locator(dates.DayLocator())
Run Code Online (Sandbox Code Playgroud)

给你:

使用日期定位器绘图


Gra*_*art 8

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

>>> import datetime
>>> date = datetime.datetime.fromtimestamp(19800801)
>>> print date.month
8
>>> print date.day
17
Run Code Online (Sandbox Code Playgroud)

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

>>> datetime.datetime.fromtimestamp(19800801).strftime('%m%d')
'0817'
Run Code Online (Sandbox Code Playgroud)

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

>>> int(datetime.datetime.fromtimestamp(19800801).strftime('%m%d'))
817
Run Code Online (Sandbox Code Playgroud)