2016-11-22 4 views
-2

Я пытался сделать диаграмму рассеяния, и моя ось x должна быть каждый отдельный день в году. я впервые прочитал в файл данных и получить столбец даты, которые заполняются с целыми числами, как, 19800801. Таким образом, я преобразовать это integer в datetime написав:Как извлечь только месяц и день из объекта datetime?

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

Тогда я хочу, чтобы извлечь только месяц и день от не объект DateTime написав:

s = datetimes_0.strftime("%m%d") 

я понял, что они возвращают значение из strftime больше не является объектом даты и времени, поэтому я попытался преобразовать его обратно в объект даты и времени, делая

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

Но вместо того, чтобы давать мне только месяц и день, он возвращает меня целый год, месяц и день. Мой вопрос: как извлечь объект datetime только месяца и дня (оба) из заданного целого числа, такого как 19800801?

+0

Вы хотите объект DateTime из строки, или вы хотите, чтобы преобразовать строку в дату? –

+0

Я хочу сначала преобразовать целое число 19800801 в объект datetime, но мне нужен только месяц и день, 0801. Поэтому в основном я хочу объект datetime, который содержит только месяц и день, что-то вроде 0801, но здесь 0801 не является целым числом , но объект datetime. Имеет ли это смысл? –

ответ

3

Это займет целое число (если предположить, что это действует эпоха) и преобразовать его в питон даты и времени объекта:

>>> 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 
+0

Но используя strftime, он возвращает мне строку вместо объекта datetime, как мне преобразовать его в объект datetime? Только месяц и день. –

+0

По какой-либо причине вы не можете использовать объект datetime из первого примера? – GracefulRestart

+0

Потому что мне нужен как месяц, так и день в одном объекте. Я пытался построить диаграмму рассеяния, и каждая отдельная дата (без года) будет составлять мою ось (поэтому 365 дней будут моей осью x), моя ось y - это температура в эту дату. Итак, вернемся к вашему вопросу, мне нужен как месяц, так и день как один объект, так что я могу поместить его в свой аргумент для plt.scatter() –

3

Если вы пытаетесь для построения временных данных в matplotlib, обычный подход состоит в том, чтобы сначала преобразовать ваши даты в объекты datatime, а затем получить matplotlib для преобразования этих значений в собственное внутреннее представление с использованием функции date2num(). Затем вы можете указать matplotlib, как форматировать любые тики по оси x, используя форматтер, в этом случае 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() 

Это отображения следующим образом:

month day xaxis matplotlib demo

Вы могли бы расширить это использовать a , в котором говорится, что matplotlib размещает стрелки в точном месте дня следующим образом:

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

Давать вам:

plot using day locator

+0

Привет: это помогает! У меня есть еще один вопрос. Поскольку мне нужно отобразить 13 лет данных, я бы хотел, чтобы ось x была всего лишь на один год (366 дней), чтобы значение на каждую дату можно было показывать в ту же дату, без года. Например, температура 4 июля (85F) может отображаться на той же оси y, независимо от того, в каком году она находится. Как это работает? –

+0

Как вы говорите, возможно, лучше всего как другой вопрос. Вам нужно будет разделить свои данные на куски года (без года), а затем распечатать их отдельно (возможно, с разными цветами). –

+0

Если вы довольны решением, не забудьте нажать на серый тик рядом с ним, чтобы отметить его как принятый ответ и получить свой значок ученого. –

Смежные вопросы