2013-10-21 10 views
17

python datetime64オブジェクトを文字列に変換するときに問題があります。私はすでに文字列に、長いdatetimedatetime64オブジェクトを変換しようとしましたが、私はこのエラーを取得するように見えるnumpy.datetime64をPythonの文字列オブジェクトに変換します

'2012.07.01' as a string. (note time difference) 

dt = t.astype(datetime.datetime) #1341100800000000000L 
time.ctime(dt) 
ValueError: unconvertible time 
たとえば、次のように中へ

t = numpy.datetime64('2012-06-30T20:00:00.000000000-0400') 

+1

ための最善の解決策はhttp://stackoverflow.com/questions/13703720/をいましたconverted-between-datetime-timestamp-and-datetime64は、あなたの特定の問題に役立ちますか? –

+0

おかげで、溶液であった:Pd等 インポートパンダ \t TS = pd.to_datetime(STR(日付)) \t D = ts.strftime( '%Y.%のM%のD') –

答えて

28

溶液は:

import pandas as pd 
ts = pd.to_datetime(str(date)) 
d = ts.strftime('%Y.%m.%d') 
0

パンダを使用しないルートがあります。下の注意を参照してください。

>>> numpy.dtype(t) 
dtype('<M8[ns]') 

これは、この値の積分値が10^9回UNIXタイムスタンプであることを意味する:

さて、t変数は、Pythonで検査することによって示すことができるナノ秒の分解能を有します。あなたの質問に印字された価値はそのヒントを与えます。

>>> import time 
>>> time.strftime("%Y.%m.%d", time.gmtime(t.astype(int)/1000000000)) 
2012.07.01 

これを使用して、2つの仮定を意識する:

1)datetime64解像度が

をナノ秒は、あなたの最善の策は、あなたが time.strftimeを使用することができます1億 tの積分値を分割することです

2)datetime64に記憶されている時間がUTC

サイドノート1である:興味深いことに、numpyの開発者は、[1]ことを決定しました10マイクロ秒より大きい解像度を持つオブジェクトはlongタイプにキャストされ、t.astype(datetime.datetime)の結果が1341100800000000000Lの理由が説明されます。その理由は、datetime.datetimeでサポートされている解像度はほんのマイクロ秒であるため、datetime.datetimeオブジェクトはナノ秒またはより細かいタイムスケールを正確に表すことができないためです。

サイドノート2:1.11以降対numpyの1.10以前の間の異なる規則を注意:numpyの< = 1.10で

  • 、datetime64はUTCとして内部に格納され、ローカル時間として印刷されます。 TZが指定されていない場合、解析はローカル時間を想定しています。そうでない場合は、タイムゾーンオフセットが考慮されます。

  • in numpy> = 1.11の場合、datetime64はタイムゾーンに依存しない値(1970-01-01 00:00から指定されていないタイムゾーンで秒)として内部的に格納され、そのまま出力されます。時刻解析はタイムゾーンを想定しませんが、+NNNNスタイルのタイムゾーンシフトは引き続き許可され、値はUTCに変換されます。

[1]:https://github.com/numpy/numpy/blob/master/numpy/core/src/multiarray/datetime.cルーチンconvert_datetime_to_pyobjectを参照してください。

4

あなたがその変換珍糞漢糞をしたいとちょうど1日付形式でOKですしていない場合は、これは私

str(t)[:10] 
Out[11]: '2012-07-01' 
関連する問題