Если вы просто хотите изменить вывод в CSV, вы можете указать date_format
в to_csv
:
In[130]:
df = pd.DataFrame({'date':[pd.datetime.strptime('11:03:41', '%H:%M:%S')]})
df.to_csv(date_format='%H:%M:%S')
Out[130]: ',date\n0,11:03:41\n'
Я бы посоветовал сохранить ваши данные как datetime64
, потому что это позволяет вамчтобы выполнить векторизованную арифметику для столбца, если вы храните как datetime.time
объекты, это ограничивает то, что вы можете сделать
. Вы всегда можете просто добавить дополнительный столбец в виде datetime.time
или str
представления:
In[131]:
df['time'] = df['date'].dt.time
df['str_rep'] = df['date'].dt.strftime('%H:%M:%S')
df
Out[131]:
date time str_rep
0 1900-01-01 11:03:41 11:03:41 11:03:41
Чтобы продемонстрировать мою точку зрения:
In[136]:
df = pd.DataFrame({'date':pd.to_datetime(['11:03:41', '15:23:33'], format='%H:%M:%S').time})
df
Out[136]:
date
0 11:03:41
1 15:23:33
сейчас, если мы выполним арифметику:
df['date'].diff()
это повысит:
TypeError: unsupported operand type(s) for -: 'datetime.time' and 'datetime.time'
хотя мы сохраняем dtype
как datetime64
, мы все равно можем выполнять арифметику и сравнения, поскольку даты все равно одинаковы, они в любом случае отменяются в зависимости от того, что вы делаете:
In[138]:
df = pd.DataFrame({'date':pd.to_datetime(['11:03:41', '15:23:33'], format='%H:%M:%S')})
df
Out[138]:
date
0 1900-01-01 11:03:41
1 1900-01-01 15:23:33
In[139]:
df.diff()
Out[139]:
date
0 NaT
1 04:19:52
обновление
Если вы действительно хотите datetime.time
, вы можете изменить lambda
:
dateparse = lambda x: pd.datetime.strptime(x, '%H:%M:%S').time()
my_data = pd.read_csv(file_name, parse_dates=['Time'], date_parser=dateparse)
, или это также будет работать:
my_data = pd.read_csv(file_name, parse_dates=['Time'],
date_parser=lambda x: pd.to_datetime(x, format='%H:%M:%S').time())
сравнения и некоторые арифметические операции будут работать, но это не так гибко, как собственный datetime64
dtype.