web-dev-qa-db-ja.com

Python / Pandasは文字列を時間のみに変換します

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_Sailobjectであることを示していることです。

この列を時刻のみを含む日時形式に変換する方法はありますか?

追加情報:

上記のデータフレームと出力を作成するには、これも機能します:

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
16
edesz

次の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
28
Merlin

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))
2
Moe Chughtai

これはうまくいくようです:

dfc['Time_of_Sail'] = pd.to_datetime(dfc['Time_of_Sail'], format='%H:%M:%S' ).apply(pd.Timestamp)

0
ferengi