2016-03-23 7 views
1

にフロートとして私は、次のシリーズで年間の一連の持っている:年Datetime64

>>>temp 
>>> 0   1994 
1   1995 
2   1996 
3   -9999 
4   1997 
5   2001 
dtype: float64 

を私は年にこれらの値を取得するために、さまざまなソリューションの数を試してみました。私はこれらの浮動小数点を有効な日時の値に変換するために次のようなものを得ることができるようです。

>>>temp.replace(-9999, np.nan).dropna().astype(int).astype(str).apply(np.datetime64) 
>>>0 1994-01-01 
1 1995-01-01 
2 1996-01-01 
4 2001-01-01 
5 2002-01-01 
dtype: datetime64[ns] 

もっと効果的な方法はありますか?私はすべてを整数に変換してから文字列を実際にこの状況で必要または適切であるとは思わない。

答えて

2

あなたはto_datetimeを試すことができます。

print temp 
0 1994 
1 1995 
2 1996 
3 -9999 
4 1997 
5 2001 
dtype: int64 

print pd.to_datetime(temp, format='%Y', errors='coerce') 
0 1994-01-01 
1 1995-01-01 
2 1996-01-01 
3   NaT 
4 1997-01-01 
5 2001-01-01 
dtype: datetime64[ns] 

そして、あなたはNaTdropnaを追加、削除が必要な場合:

標準のdatetimeライブラリを使用して
print pd.to_datetime(temp, format='%Y', errors='coerce').dropna() 
0 1994-01-01 
1 1995-01-01 
2 1996-01-01 
4 1997-01-01 
5 2001-01-01 
dtype: datetime64[ns] 
0

datetime.datetime.strptime(str(temp[1]),'%Y') 

しかしを反復する必要がシリーズを起動し、エラーを管理します。

for i in range(1,len(temp)+1): 
    try: 
     temp[i]=datetime.datetime.strptime(str(temp[i]),'%Y') 
    except: 
     temp[i]=None 
:-9999

このような何かは、トリックを行います

関連する問題