2016-12-18 7 views
1

をINT64するパンダのデータフレーム内の系列オブジェクトの列を変換します。Pythonの:私は、次のデータフレームを持ってDTYPE

Day_Part  Start_Time End_Time 
Breakfast 9:00   11:00 
Lunch  12:00   14:00 
Dinner  19:00   23:00 

列START_TIMEとEND_TIMEは今 "シリーズObjectsのです。これらの列の値をint64 dtypeに変換したい。

は、これは私がデータフレームが見えるようにしたいものです:*

Day_Part  Start_Time End_Time 
Breakfast 9    11 
Lunch  12   14 
Dinner  19   23 

すべてのヘルプは大歓迎です。

答えて

0

最初to_timedeltaを変換してから抽出することができますhour

df['Start_Time'] = pd.to_timedelta(df['Start_Time']+ ':00').dt.components.hours 
df['End_Time'] = pd.to_timedelta(df['End_Time']+ ':00').dt.components.hours 
print (df) 

    Day_Part Start_Time End_Time 
0 Breakfast   9  11 
1  Lunch   12  14 
2  Dinner   19  23 

intsplitとキャストのもう一つの解決策:

df['Start_Time'] = df['Start_Time'].str.split(':').str[0].astype(int) 
df['End_Time'] = df['End_Time'].str.split(':').str[0].astype(int) 
print (df) 

    Day_Part Start_Time End_Time 
0 Breakfast   9  11 
1  Lunch   12  14 
2  Dinner   19  23 

extractキャストとソリューションintへ:

df['Start_Time'] = df['Start_Time'].str.extract('(\d*):', expand=False).astype(int) 
df['End_Time'] = df['End_Time'].str.extract('(\d*):', expand=False).astype(int) 
print (df) 

    Day_Part Start_Time End_Time 
0 Breakfast   9  11 
1  Lunch   12  14 
2  Dinner   19  23 
変換 to_datetime

ソリューション:

df['Start_Time'] = pd.to_datetime(df['Start_Time'], format='%H:%M').dt.hour 
df['End_Time'] = pd.to_datetime(df['End_Time'], format='%H:%M').dt.hour 
print (df) 
    Day_Part Start_Time End_Time 
0 Breakfast   9  11 
1  Lunch   12  14 
2  Dinner   19  23 

タイミング

#[300000 rows x 3 columns] 
df = pd.concat([df]*100000).reset_index(drop=True) 
print (df) 

In [158]: %timeit pd.to_timedelta(df['Start_Time']+ ':00').dt.components.hours 
1 loop, best of 3: 7.12 s per loop 

In [159]: %timeit df['Start_Time'].str.split(':').str[0].astype(int) 
1 loop, best of 3: 415 ms per loop 

In [160]: %timeit df['Start_Time'].str.extract('(\d*):', expand=False).astype(int) 
1 loop, best of 3: 654 ms per loop 

In [166]: %timeit pd.to_datetime(df['Start_Time'], format='%H:%M').dt.hour 
1 loop, best of 3: 1.26 s per loop 
関連する問題