web-dev-qa-db-ja.com

日時オブジェクトから月と日だけを抽出する方法は?

私は散布図を作成しようとしていましたが、私のx軸は1年の各日である必要があります。最初にデータファイルを読み込んで、19800801のような整数で満たされた日付列を取得します。したがって、次のように書くことで、このintegerdatetimeに変換します。

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

次に、次のように記述して、datetimeオブジェクトから月と日のみを抽出します。

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

strftimeからの戻り値がdatetimeオブジェクトではなくなったので、次のようにしてdatetimeオブジェクトに変換してみました。

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

しかし、月と日だけを与えるのではなく、年、月、日全体を返すことができます。私の質問は、19800801のような指定された整数から、月と日(両方)のみのdatetimeオブジェクトをどのように抽出するのですか?

6
Candice Zhang

時間ベースのデータをmatplotlibにプロットする場合、通常の方法は、最初に日付をdatatimeオブジェクトに変換し、次にmatplotlibにこれらの値を date2num() 関数。次に、matplotlibに、フォーマッター(この場合は DateFormatter() )を使用してx軸の目盛りをフォーマットする方法を指示できます。したがって、たとえば、ティックごとに月と日を表示するように選択できます。

この例では、下の行に日を入れて月を表示します。

_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

次に、これを拡張してDayLocator()を使用し、matplotlibに次のようにxticksを正確な日の場所に配置するように指示できます。

_ax.xaxis.set_major_locator(dates.DayLocator())
_

あなたに与える:

plot using day locator

10
Martin Evans

これは整数を受け取り(有効なエポックであると想定)、python datetimeオブジェクトに変換します:

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

またはstrftimeを使用(日付時刻オブジェクトではなく文字列を返します):

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

月と日を単一の整数として出力する:

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