如果您只想将输出修改为csv格式,您可以在to_csv
中指定date_format
:
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
类型那样灵活。
dateparse = lambda x: pd.datetime.strptime(x, '%H:%M:%S').time()
或pd.to_datetime(x, format='%H:%M:%S').time()
来实现此操作,但正如我所说,这会导致性能问题。个人而言,除非您只想要pandas
的便利,否则不要在df中存储非numpy本机dtypes。 - EdChum