web-dev-qa-db-ja.com

パンダ:タイムスタンプから日付と時刻を抽出する

タイムスタンプが次の形式のtimestamp列があります

2016-06-16T21:35:17.098+01:00

そこから日時を抽出したい。私は次のことを行いました:

import datetime as dt

df['timestamp'] = df['timestamp'].apply(lambda x : pd.to_datetime(str(x)))

df['dates'] = df['timestamp'].dt.date

これはしばらくの間うまくいきました。しかし、突然それはありません。

もう一度[df['dates'] = df['timestamp'].dt.date]を実行すると、次のエラーが発生します

Can only use .dt accessor with datetimelike values

幸いにも、csvにdatesを使用してデータフレームを保存しましたが、23:00:00.051という形式で別の列timeを作成したいと思います

[〜#〜]編集[〜#〜]

生データファイル(1500万サンプル)から、timestamp列は次のようになります(最初の5つのサンプル)。

            timestamp

0           2016-06-13T00:00:00.051+01:00
1           2016-06-13T00:00:00.718+01:00
2           2016-06-13T00:00:00.985+01:00
3           2016-06-13T00:00:02.431+01:00
4           2016-06-13T00:00:02.737+01:00

次のコマンドの後

df['timestamp'] = df['timestamp'].apply(lambda x : pd.to_datetime(str(x)))

timestamp列は、dtypeがdtypeとして次のようになります:datetime64 [ns]

0    2016-06-12 23:00:00.051
1    2016-06-12 23:00:00.718
2    2016-06-12 23:00:00.985
3    2016-06-12 23:00:02.431
4    2016-06-12 23:00:02.737

そして最後に

df['dates'] = df['timestamp'].dt.date

0           2016-06-12
1           2016-06-12
2           2016-06-12
3           2016-06-12
4           2016-06-12

編集2

間違いを見つけた。データをクリーンアップしてcsvファイルにデータフレームを保存したので、再度クリーンアップを実行する必要はありません。 csvを読み取ると、タイムスタンプdtypeがオブジェクトに変わります。どうすればこれを修正できますか?

12
chintan s

日付が文字列形式の場合:

import datetime

# this line converts the string object in Timestamp object
df['DateTime'] = [datetime.datetime.strptime(d, "%Y-%m-%d %H:%M") for d in df["DateTime"]]

# extracting date from timestamp
df['Date'] = [datetime.datetime.date(d) for d in df['DateTime']] 

# extracting time from timestamp
df['Time'] = [datetime.datetime.time(d) for d in df['DateTime']] 

オブジェクトが既にタイムスタンプ形式である場合は、コードの最初の行をスキップします。

%Y-%m-%d %H:%Mこれは、タイムスタンプオブジェクトが2016-05-16 12:35:00

14
Ajay Goyal

最初にこれを行います:

df['time'] = pd.to_datetime(df['timestamp'])

通常どおり抽出を行う前に:

df['dates'] = df['time'].dt.date
7
Gursel Karacor