タイムスタンプが次の形式の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
がオブジェクトに変わります。どうすればこれを修正できますか?
日付が文字列形式の場合:
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
。
最初にこれを行います:
df['time'] = pd.to_datetime(df['timestamp'])
通常どおり抽出を行う前に:
df['dates'] = df['time'].dt.date