2015-10-16 2 views
1

Я читал файл Excel, который имеет следующую структуру:панд - Используйте datetime.time объектов как DTYPE

A    B 
2015-09-05  15:05:32 
2015-09-05  19:05:02 

Я читаю этот файл, используя

df = pd.ExcelFile(filename).parse(..) 

Когда я смотрю на dtype, этого DataFrame, я могу видеть, что даты обрабатываются должным образом как 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 колонки к чему-то, что я могу использовать более легко , Например, я хотел бы использовать MultiIndex с первым днем, а затем время (чтобы я мог группировать и группировать). Или я хотел бы присоединиться к двум, чтобы у меня была одна колонка, полная дата.

Но в этот момент я застрял. Я попытался преобразовать их в datetime:

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

Есть идеи?

ответ

0

Если вы просто хотите, чтобы присоединиться к двум, вы можете присоединиться к ним как строки:

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) 
+0

Это частично работает, когда dtypes оба объекта , но если один из dtypes - 'datetime64', он дает ошибку. Если вы добавите это между двумя строками, например: 'df ['A'] = df ['A']. Astype ('datetime64')' – user1496984

+0

Я думаю, вы могли бы указать свой dtype как строку при чтении или используйте дату и время, как в отредактированном ответе. –