Pandasのdata_rangeを使って日付の列を作る
例えば2019年1月1日から2020年1月1日までの間にある、月末日を求めたいときはpd.date_range(start='1/1/2019', end='1/1/2020', freq='M')
DatetimeIndex(['2019-01-31', '2019-02-28', '2019-03-31', '2019-04-30',
'2019-05-31', '2019-06-30', '2019-07-31', '2019-08-31',
'2019-09-30', '2019-10-31', '2019-11-30', '2019-12-31'],
dtype='datetime64[ns]', freq='M')
となります。
start, end, freqを入力すればよいです。日付は 月/日/年がデフォルトです。
freqはDate Offsetの記号で多数あるようです(使い勝手が悪そうなものも多いですが)。
Mは月末でMSが月初というのが注意点です。
W Week(W-SUN) W-MON Monday W-... (他の曜日) M MonthEnd MS MonthBegin D Day H Hour
https://pandas.pydata.org/pandas-docs/stable/user_guide/timeseries.html#dateoffset-objects
Matplotlibで横軸に日時の列を使う
# 日時を作る 2020年1月1日から4月1日までの水曜日の列
d = pd.date_range(start="1/1/2020", end="4/1/20", freq="W-WED")
v = np.linspace(1,10,len(d))
plt.plot(range(d.size), v, 'o')
# ticks, labelを作る
xticks = range(len(d))
xticklabels = [(d[0]+d[0].freq*x).strftime('%-m/%-d') for x in range(len(d))]
# xticksをセット
plt.xticks(xticks, xticklabels)
# x軸の左右のマージンをなくしている
plt.autoscale(True, axis='x', tight=True)
plt.show()
# 日時d の中身
DatetimeIndex(['2020-01-01', '2020-01-08', '2020-01-15', '2020-01-22',
'2020-01-29', '2020-02-05', '2020-02-12', '2020-02-19',
'2020-02-26', '2020-03-04', '2020-03-11', '2020-03-18',
'2020-03-25', '2020-04-01'],
dtype='datetime64[ns]', freq='W-WED')
0 件のコメント:
コメントを投稿