2017-02-27 1 views
0

年のリストを配列形式で取得します。1700,1701,1702.... 1970 そして、年の最初の日に変換したいとします。 1700-01-01 00:00年のリストをyyyy-mm-ddの形式で生成します。yyyy python datetimeから

私はコードの下にしようとしている:

year=range(1700,1970) 
time=datetime.date(year,"%Y").date() 

が、このエラーを得た:

time=datetime.date(times,"%Y").date() 
TypeError: descriptor 'date' requires a 'datetime.datetime' object but received a 'numpy.ndarray' 

誰も私を助けることができることは、非常に簡単にする必要がありますか?ありがとう。

+0

単純な文字列の書式設定を試しましたか? '"%d-01-01 00:00 "%年"? –

答えて

1

あなたは(あなたが本当にする必要がある場合)datetime.datetimeオブジェクトに変換するにはtolistを使用し、その後、numpyのdatetime64[Y]sに整数に変換することができます:np.array(year, dtype='datetime64[Y]')解釈以来

import numpy as np 

year = range(1700,1970) 
dates = (np.array(year, dtype='datetime64[Y]')-1970).astype('datetime64[s]').tolist() 
for date in dates[:5]: 
    print(date) 

プリント

1700-01-01 00:00:00 
1701-01-01 00:00:00 
1702-01-01 00:00:00 
1703-01-01 00:00:00 
1704-01-01 00:00:00 

1970年1月1日の1970年1月1日のEpochに関連する整数は、正しい日付に到着するために減算されなければならない。 astype('datetime64[s]')は、datetime64を年解像度でdatetime64秒に2番目の解像度で変換するために使用されます。これにより、tolist()datetime.datetimeオブジェクトのリストを作成します。 astype('datetime64[s]')の呼び出しがなければ、の配列のtolistを呼び出すと、datetime.dateのリストが返されます。いくつかの目的のため


datetime64 Sのnumpyのアレイを有する計算はdatetime.datetime Sのリストと同等の計算よりはるかに高速です。したがって、

dates = (np.array(year, dtype='datetime64[Y]')-1970).astype('datetime64[s]') 

を使用し、tolist()を呼び出すことを避けることができます。

0

このような何かが、トリックを行う必要があります。

years = [str(datetime.datetime(y, 1, 1)) for y in range(1700, 1971)] 

あなたはあなたが投稿したコードを見て、しかしnumpyのエラーを取得しているところ私は知りません。

関連する問題