2016-09-18 4 views
1

あなたはnumpyの日時配列からyearwiseの年を取得する方法を考えていますか? 私のコードでは、配列の1要素の年の日しか受け取れません。配列の各要素の年の日はどのように取得できますか?ここ は(あなたのコードを含む)私のコードです:numpyの日時配列からyearwise dayを取得するにはどうすればよいですか?

#import modules 
import numpy as np 
import pandas as pd 
import datetime 
from datetime import datetime 

#date values in an numpy array as int 
data_int = np.array([[20131001, 20131001, 20131001], 
        [20131002, 20131002, 20131002], 
        [20131002, 20131002, 20131002]]) 
#transform the data_int array in a datetime list 
data_list = [pd.to_datetime(pd.Series(x), format="%Y%m%d") for x in data_int] 
#transform the datetime list back to an datetime array with dtype='datetime64[ns]') 
data = np.asarray(data_list, dtype='datetime64', order=None) 
#convert dtype='datetime64[ns]' into a datetime.date object 
data_date = data.astype('M8[D]').astype('O') 
#get the day of the year from the the data_date array. 
day_of_year = data_date[0,1].timetuple().tm_yday 
#274 

あなたや他の誰かが私のために良いアイデアを持っている場合、それは素晴らしいことです! ありがとうございました!

答えて

0
import numpy as np 
import pandas as pd 

#date values in an numpy array as int 
data_int = np.array([[20131001, 20131001, 20131001], 
        [20131002, 20131002, 20131002], 
        [20131002, 20131002, 20131002]]) 
#transform the data_int array in a datetime list 
data_list = [pd.to_datetime(pd.Series(x), format="%Y%m%d") for x in data_int] 
doy = pd.DataFrame([x.apply(lambda x: x.timetuple().tm_yday) for x in data_list]).values 
print(doy) 

出力:

[[274 274 274] 
[275 275 275] 
[275 275 275]] 
+0

こんにちはオフィールカルミさん、お世話になりました。今年の1日を計算するのは本当に簡単です!しかしもう一つ質問があります。 10月1日に計算を開始する必要があります。したがって、私はあなたのコードを少し変更して動作します。しかし、1つの欠点があります - 出力配列の形状が異なっています(3,3)の代わりに(3,1)の形があります。間違っていますか?繰り返しと何か関係があります。この問題を解決するアイディアがあります。Greetings、 – angi

+0

修正されたコードはAwnser2にあります。Greetings、 – angi

0

ここ 1. 10月の年caluculationの日を開始し、私の修正コードは、あります。残念なことに、このコードでは、私は間違った配列形を取得します。 (3,3)の形の代わりに(3.1)の形を得ます。なぜ??? この問題を解決するための良いアイディアがありがとうございます。

#import modules 
import pandas as pd 
import numpy as np 

#test numpy array 
data_int = np.array([[0., 20131001., 20131001.], 
        [20131002., 20131002., 20131002.], 
        [20131002., 20131002., 20140930.]]) 
#replace zero values with nan in the data_int numpy array 
data_int[data_int==0]=['nan'] 
#transform the data_int array in a datetime list 
data_list = [pd.to_datetime(pd.Series(x), format="%Y%m%d") for x in data_int] 
#create a datetime start date 
start_date = pd.to_datetime(pd.Series('20131001'), format="%Y%m%d") 
#caluculate the day of year. Unfortunately with this function 
#I got an wrong numpy array shape with (3,1) instead of (3.3). 
doy = pd.DataFrame([x.apply(lambda x: x - start_date) for x in data_list]).values 
#print doy. Thats how my result looks right now. 

#array([[  0 
#0 NaT 
#1 0 days 
#2 0 days], 
#  [  0 
#0 1 days 
#1 1 days 
#2 1 days], 
#  [   0 
#0 1 days 
#1 1 days 
#2 364 days]], dtype=object) 

#and that's how my endresult should look like: 
data_out = np.array([[0, 0, 0], 
        [1, 1, 1], 
        [1, 1, 1]]) 
関連する問題