メモランダム!!

自分用の端書のため,他の人が読めるようには書いていません.悪しからずm(_ _)m

Python:秒数が小数点以下のパース

Pandasでデータフレームに格納するときに,時間にナノ秒まで含まれている時のパースのやり方についてのメモ.

対象とするのはこんなデータ.

//file.csv
17:22:59.703371360,10
17:22:59.788956621,20
17:22:59.790719017,30
17:22:59.813919277,20
17:22:59.891942610,10
17:22:59.898820371,20
17:22:59.919604329,30

こんな感じで,小数点以下がすごい長いデータをパースしたいわけです.
一例としてこんな感じでしょうか.

import pandas as pd

# データ読み込み
df = pd.read_csv('file.csv', names=('time', 'val'))

# datetime型に変換
from dateutil import parser
df.time = df.time.apply(lambda x: parser.parse(x))

# 表示
print(df.dtypes)

出力すると

time    datetime64[ns]
val              int64
dtype: object

parserを使って無理やりdatetime型に変えています.
あとはapplyで一行づつ適用してます.
若干力技な気がしますが...

追記

このフォーマットの場合はparse_datesで指定するだけでも行けるっぽい.

import pandas as pd

# データ読み込み
df = pd.read_csv('time.csv', names=('time', 'val'),parse_dates=['time'])

# 表示
print(df.dtypes)