Используйте dt.hour
:
df['time'] = pd.to_datetime(df['time'])
df['hours'] = df['time'].dt.hour
Но если вам действительно нужно только ваше решение rename
column
, преобразование в Series
не требуется, посколькукаждый столбец DataFrame
равен Series
после выбора (print (type(df['time'])))
:
df = pd.DataFrame({'time':['10:20:30','20:03:04']})
df['time'] = pd.to_datetime(df['time'])
hour_col = df['time'].rename('hour')
hour_col = hour_col.apply(lambda t: t.hour)
df = pd.concat([df, hour_col], axis=1)
print (df)
time hour
0 2018-11-24 10:20:30 10
1 2018-11-24 20:03:04 20
Если хотите заменить столбцы позицией (например, из-за дублированных значений и rename
измените оба имени, как упомянуто @Gla Avineri в комментарии) использовать:
df = pd.DataFrame({'time':['10:20:30','20:03:04'],
'a':[2,3],
'b':[-4,5]})
df['time'] = pd.to_datetime(df['time'])
hour_col = df['time']
hour_col = hour_col.apply(lambda t: t.hour)
df = pd.concat([df, hour_col], axis=1)
#converting to list because columns are immutable
cols = df.columns.tolist()
#set 4th value
cols[3] = 'hour'
#assign back
df.columns = cols
print (df)
time a b hour
0 2018-11-24 10:20:30 2 -4 10
1 2018-11-24 20:03:04 3 5 20