Python pandas-使用datetime.time对象作为数据类型

Python pandas-使用datetime.time对象作为数据类型,python,datetime,pandas,time-series,Python,Datetime,Pandas,Time Series,我正在读取具有以下结构的Excel文件: A B 2015-09-05 15:05:32 2015-09-05 19:05:02 我正在使用 df = pd.ExcelFile(filename).parse(..) 当我查看此数据帧的dtype时,我可以看到日期被正确解析为datetime64对象,但时间不是: >>> df.dtypes A datetime64[ns] B

我正在读取具有以下结构的Excel文件:

    A               B 
2015-09-05       15:05:32
2015-09-05       19:05:02
我正在使用

df = pd.ExcelFile(filename).parse(..)
当我查看此数据帧的
dtype
时,我可以看到日期被正确解析为
datetime64
对象,但时间不是:

>>> df.dtypes
     A         datetime64[ns]
     B         object
奇怪的是,当我查看
B
的内容时,我可以看到它们都是
datetime.time
对象

[s for s in main_df['B'].tolist() if type(s) is not datetime.time]
# There are no values that are *not* datetime.time objects
我想把这个
B
列转换成我更容易使用的内容。例如,我想先使用
多索引
,然后使用时间(这样我就可以进行分组和聚合)。或者我想加入这两个,这样我就有了一个列,那就是完整的日期

但在这一点上,我被卡住了。我尝试将它们转换为
datetime

main_df['B'] = main_df['B'].astype('datetime64')
ValueError: Could not convert object to NumPy datetime

有什么想法吗?

如果您只想将两者结合起来,您可以将它们作为字符串结合起来:

df = pd.DataFrame({ 'A' : ['2015-09-05', '2015-09-05'], 'B': ['15:05:32', '19:05:02']})
pd.to_datetime(df.A + ' ' + df.B)
或者您可以使用datetime组合:

import datetime

df.apply(lambda x: datetime.datetime.combine(x.A, x.B), axis=1)

如果您只想将两者连接起来,可以将它们作为字符串连接起来:

df = pd.DataFrame({ 'A' : ['2015-09-05', '2015-09-05'], 'B': ['15:05:32', '19:05:02']})
pd.to_datetime(df.A + ' ' + df.B)
或者您可以使用datetime组合:

import datetime

df.apply(lambda x: datetime.datetime.combine(x.A, x.B), axis=1)

当两个数据类型都是对象时,这部分工作正常,但如果其中一个数据类型是
datetime64
,则会出现错误。如果您在两行之间添加此项,例如:
df['A']=df['A'].astype('datetime64')
我想您可以在读入时将其数据类型指定为字符串,或者在编辑的答案中使用datetime。当数据类型都是对象时,这部分起作用,但如果其中一个数据类型是
datetime64
,则会给出一个错误。如果您在两行之间添加此项,例如:
df['A']=df['A'].astype('datetime64')
我想您可以在读入时将其数据类型指定为string,或者在编辑的答案中使用datetime。