In [25]: dates = np.arange(np.datetime64('2010-01-01'),np.datetime64('2014-12-31'))
In [26]: dates
Out[26]:
array(['2010-01-01', '2010-01-02', '2010-01-03', ..., '2014-12-28',
'2014-12-29', '2014-12-30'], dtype='datetime64[D]')
In [27]: dates.shape
Out[27]: (1825,)
、これは、値の範囲に及ぶ1Dアレイを作成します。クリアするために、配列には日付の値を表す数値(浮動小数点数)が含まれています。 ndarray
コードは、これらの数字を解釈するために、特定のdtype
を使用します。配列を表示すると、データはこれらのデータ文字列としてレンダリングされます(dtype
の[D]
の部分によって示されます)。
どのような種類の列が必要ですか?
任意の1次元配列と同じように、あなたがボリュームのベクトルを作成することができます。
In [28]: dates[:,None]
Out[28]:
array([['2010-01-01'],
['2010-01-02'],
['2010-01-03'],
...,
['2014-12-28'],
['2014-12-29'],
['2014-12-30']], dtype='datetime64[D]')
alist = dates.tolist()
In [59]: alist[:10]
Out[59]:
[datetime.date(2010, 1, 1),
datetime.date(2010, 1, 2),
datetime.date(2010, 1, 3),
datetime.date(2010, 1, 4),
datetime.date(2010, 1, 5),
datetime.date(2010, 1, 6),
datetime.date(2010, 1, 7),
datetime.date(2010, 1, 8),
datetime.date(2010, 1, 9),
datetime.date(2010, 1, 10)]
はdatetime
オブジェクトのリストを生成します。これらのオブジェクトから年、月、日を繰り返し抽出します。
In [66]: np.array([[x.year, x.month, x.day] for x in alist])
Out[66]:
array([[2010, 1, 1],
[2010, 1, 2],
[2010, 1, 3],
...,
[2014, 12, 28],
[2014, 12, 29],
[2014, 12, 30]])
np.datetime64
dtypeには全く同じものがありません。私たちはそれらをさまざまな単位に変換し、違いを取ることができます。
In [68]: yrs = dates.astype('datetime64[Y]')
In [69]: yrs
Out[69]: array(['2010', '2010', '2010', ..., '2014', '2014', '2014'], dtype='datetime64[Y]')
In [70]: mths = dates.astype('datetime64[M]')-yrs
In [71]: mths
Out[71]: array([ 0, 0, 0, ..., 11, 11, 11], dtype='timedelta64[M]')
In [72]: days = dates - dates.astype('datetime64[M]')
In [73]: days
Out[73]: array([ 0, 1, 2, ..., 27, 28, 29], dtype='timedelta64[D]')
異なるdtypes
では、これらを直接連結することはできません。しかしそれらを整数に変換すると、同じ2次元配列を得ることができます:
In [76]: np.stack((yrs.astype(int), mths.astype(int), days.astype(int)),axis=1)
Out[76]:
array([[40, 0, 0],
[40, 0, 1],
[40, 0, 2],
...,
[44, 11, 27],
[44, 11, 28],
[44, 11, 29]])
(年はオフセットが必要です)。
In [77]: np.stack((yrs.astype(int)+1970, mths.astype(int), days.astype(int)),axis=1)
や '積み重ね' 構造化された配列:
In [78]: np.rec.fromarrays([yrs, mths, days])
Out[78]:
rec.array([('2010', 0, 0), ('2010', 0, 1), ('2010', 0, 2), ...,
('2014', 11, 27), ('2014', 11, 28), ('2014', 11, 29)],
dtype=[('f0', '<M8[Y]'), ('f1', '<m8[M]'), ('f2', '<m8[D]')])
私はOPが "日、月、年"の列IIUCを探していると思います。 – DSM
それは私の推測です。しかし、もしそうなら、質問にはっきりと述べるべきです。 – hpaulj
これらの日付を分割することは、それほど些細なことではありません。そのようなdtypeに対して明示的な 'get_month'メソッドや関数を見つけることができません。 'datetime'オブジェクトのリストを扱うか、' datetime64'単位でゲームをする必要があります。 – hpaulj