Pandas 2.7には次のPythonデータフレームがあります。
import pandas as pd
trial_num = [1,2,3,4,5]
sail_rem_time = ['11:33:11','16:29:05','09:37:56','21:43:31','17:42:06']
dfc = pd.DataFrame(Zip(*[trial_num,sail_rem_time]),columns=['Temp_Reading','Time_of_Sail'])
print dfc
データフレームは次のようになります。
Temp_Reading Time_of_Sail
1 11:33:11
2 16:29:05
3 09:37:56
4 21:43:31
5 17:42:06
このデータフレームは* .csvファイルから取得されます。 Pandasを使用して、*。csvファイルをPandasデータフレームとして読み取ります。 print dfc.dtypes
を使用すると、Time_of_Sail
列のデータ型がobject
であることがわかります。この列をdatetime
データ型に変換したいのですが、時間部分のみが必要です。年、月、日付は必要ありません。
私はこれを試すことができます:
dfc['Time_of_Sail'] = pd.to_datetime(dfc['Time_of_Sail'])
dfc['Time_of_Sail'] = [time.time() for time in dfc['Time_of_Sail']]
しかし問題は、print dfc.dtypes
を実行したときに、列Time_of_Sail
がobject
であることを示していることです。
この列を時刻のみを含む日時形式に変換する方法はありますか?
追加情報:
上記のデータフレームと出力を作成するには、これも機能します:
import pandas as pd
trial_num = [1,2,3,4,5]
sail_rem_time = ['11:33:11','16:29:05','09:37:56','21:43:31','17:42:06']
data = [
[trial_num[0],sail_rem_time[0]],
[trial_num[1],sail_rem_time[1]],[trial_num[2],sail_rem_time[2]],
[trial_num[3],sail_rem_time[3]]
]
dfc = pd.DataFrame(data,columns=['Temp_Reading','Time_of_Sail'])
dfc['Time_of_Sail'] = pd.to_datetime(dfc['Time_of_Sail'])
dfc['Time_of_Sail'] = [time.time() for time in dfc['Time_of_Sail']]
print dfc
print dfc.dtypes
次の2行:
dfc['Time_of_Sail'] = pd.to_datetime(dfc['Time_of_Sail'])
dfc['Time_of_Sail'] = [time.time() for time in dfc['Time_of_Sail']]
次のように記述できます。
dfc['Time_of_Sail'] = pd.to_datetime(dfc['Time_of_Sail'],format= '%H:%M:%S' ).dt.time
To_timedeltaを使用すると、second、minなどの単位を指定して、文字列を時間形式(timedelta64 [ns])に変換できます。
dfc['Time_of_Sail'] = pd.to_timedelta(dfc['Time_of_Sail'], unit='s')
単純な変換が必要な場合は、以下を実行できます。
import datetime as dt
dfc.Time_of_Sail = dfc.Time_of_Sail.astype(dt.datetime)
または、以下のように時間列にホルダー文字列を追加してから、適用関数を使用して変換できます。
dfc.Time_of_Sail = dfc.Time_of_Sail.apply(lambda x: '2016-01-01 ' + str(x))
dfc.Time_of_Sail = pd.to_datetime(dfc.Time_of_Sail).apply(lambda x: dt.datetime.time(x))
これはうまくいくようです:
dfc['Time_of_Sail'] = pd.to_datetime(dfc['Time_of_Sail'], format='%H:%M:%S' ).apply(pd.Timestamp)