2016-05-20 20 views
2

datetime64からdatetimeの形式にPandas Data Frameの列を入れたいと思います。これは個別に行われます。特に、以下は、正常に動作します:私は列全体Pandasデータフレーム列をnp.datetime64からdatetimeに変換する方法は?

dt['datetime'] = dt['time'].apply(lambda x: datetime.utcfromtimestamp(x.astype(int)/1000000000)) 

にこれを実行しようとすると、

t = dt['time'].values[0] 
datetime.utcfromtimestamp(t.astype(int)/1000000000) 

はしかし、私は次のエラーを取得する:

パンダ/ SRC/inference.pyx pandas.lib.map_infer(パンダ/ lib.c:62578)で()

<ipython-input-26-5950d82979b4> in <lambda>(x) 
     1 print(type(dt['time'].values[0])) 
     2 
----> 3 dt['datetime'] = dt['time'].apply(lambda x: datetime.utcfromtimestamp(x.astype(int)/1000000000)) 
     4 t = dt['time'].values[0] 
     5 print(t) 

AttributeError: 'Timestamp' object has no attribute 'astype' 

は私が間違って何をしているのですか?列をdatetimeに変換したり、新しい列をdatetime形式で作成するにはどうすればよいですか?ここで

は、データフレームのための情報である:あなたのデータセットなし

info

+0

@unutbu完了!見ていただきありがとうございます。 – helloB

答えて

0

、私はいくつかのことを推測しなければなりません。しかし、あなたは、あなたが働いたことを実証したものと同じことを繰り返すことができます。

dt['datetime'] = datetime.utcfromtimestamp(dt['time'].values.astype(int)/1000000000)) 
+0

提案してくれてありがとうございますが、これはまたエラーを生成します: 'TypeError:int()の引数は、文字列、バイトのようなオブジェクトまたは数値でなければなりません。' Timestamp ' – helloB

2

あなたは.dt.to_pydatetime()メソッドを呼び出すことによってdatetime.datetimeオブジェクトのnumpyのアレイにDTYPE datetime64[ns]のシリーズを変換することができます(たとえば、シリーズおよびデータフレームなど)NDFramesのみを保持できることを

In [75]: df.info() 
<class 'pandas.core.frame.DataFrame'> 
RangeIndex: 252 entries, 0 to 251 
Data columns (total 1 columns): 
time 252 non-null datetime64[ns]<--the `time` column has dtype `datetime64[ns]` 
dtypes: datetime64[ns](1) 
memory usage: 2.0 KB 

In [77]: df.head() 
Out[77]: 
     time 
0 2009-01-02 
1 2009-01-05 
2 2009-01-06 
3 2009-01-07 
4 2009-01-08 


In [76]: df['time'].dt.to_pydatetime()[:5] 
Out[76]: 
array([datetime.datetime(2009, 1, 2, 0, 0), 
     datetime.datetime(2009, 1, 5, 0, 0), 
     datetime.datetime(2009, 1, 6, 0, 0), 
     datetime.datetime(2009, 1, 7, 0, 0), 
     datetime.datetime(2009, 1, 8, 0, 0)], dtype=object) 

注意をdtype datetime64[ns]のオブジェクトと同じ日時のようなオブジェクト。すべてのdatetime-likesを共通のdtypeに自動的に変換すると、その後の日付計算が簡単になります。しかし、Python datetime.datetimeオブジェクトをDataFrame列に格納することは不可能です。パンダのコア開発者Jeff Reback explains

"We don't allow direct conversions because its simply too complicated to keep anything other than datetime64[ns] internally (nor necessary at all)."

+0

ありがとうございます。これは私の方法の一部を取得していますが、私はこのdatetimeを元のデータフレームの列にします。配列を作成している場合は、どうしたらいいですか? – helloB

+0

Pandasは、DataFrameのdatetimeのようなオブジェクトが 'datetime64 [ns]' dtypeに変換されることを確実にするために非常に努力しています。これは、異種のdatetimeのようなオブジェクトを計算に適した単一のデータ型に集約するという利点があります。しかし、DataFrame列の 'datetime64 [ns]'以外のdtypeにdatetimeのようなオブジェクトを格納することはできません。 Pythonの 'datetime.datetime'を使って作業する必要がある場合、それらをDataFrameの外の変数に保持する必要があります。 – unutbu

+0

同じ問題が発生しました。(http://stackoverflow.com/a/31918181/190597) - OPはdatetime.datetimeの代わりにdtype 'datetime64 [D]'のシリーズを望んでいましたが、不可能でした基本的には同じ理由からです。 – unutbu

関連する問題