Can*_*ang 4 python datetime matplotlib strptime pandas
我试图做一个散点图,我的x轴需要是一年中的每一天.我首先在数据文件中读取并获取日期列,其中填充了整数,如19800801.所以我将其转换integer为datetime:
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)中提取只有月和日(两者)的日期时间对象?
如果您尝试在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)
这将显示如下:
然后你可以扩展它以使用一个DayLocator()告诉matplotlib将xticks放在确切的日期位置,如下所示:
ax.xaxis.set_major_locator(dates.DayLocator())
Run Code Online (Sandbox Code Playgroud)
给你:
这将采用一个整数(假设它是一个有效的纪元)并将其转换为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)
| 归档时间: |
|
| 查看次数: |
34173 次 |
| 最近记录: |