Использование панд для выполнения дельта времени из 2 столбцов "чч: мм: сс XX" в Microsoft Excel - PullRequest
0 голосов
/ 06 декабря 2018

У меня есть файл Excel со столбцом с именем StartTime, содержащим данные hh:mm:ss XX, и ячейки в произвольном формате `h: mm: ss AM / FM '.Например,

ID    StartTime
1     12:00:00 PM
2      1:00:00 PM
3      2:00:00 PM

Я использовал следующий код для чтения файла

df = pd.read_excel('./mydata.xls',
                   sheet_name='Sheet1',
                   converters={'StartTime' : str},
                   )

df показывает

ID  StartTime
1   12:00:00
2    1:00:00
3    2:00:00

Это ошибка или как это сделатьты преодолеваешь это?Спасибо.

[Обновление: 7 декабря 2018 года]

Полагаю, я мог внести изменения в файл Excel, которые сделали его странным.Я создал другой файл Excel и представляю здесь (я не мог прикрепить файл Excel здесь, и это тоже небезопасно):

enter image description here

Я создалследующий код для проверки:

import pandas as pd

df = pd.read_excel('./Book1.xlsx',
                   sheet_name='Sheet1',
                   converters={'StartTime': str,
                               'EndTime': str                   
                              }
                  )

df['Hours1'] = pd.NaT
df['Hours2'] = pd.NaT

print(df,'\n')

df.loc[~df.StartTime.isnull() & ~df.EndTime.isnull(),
       'Hours1'] = pd.to_datetime(df.EndTime) - pd.to_datetime(df.StartTime)

df['Hours2'] = pd.to_datetime(df.EndTime) - pd.to_datetime(df.StartTime)
print(df)

Выходные данные

   ID StartTime   EndTime Hours1 Hours2
0   0  11:00:00  12:00:00    NaT    NaT
1   1  12:00:00  13:00:00    NaT    NaT
2   2  13:00:00  14:00:00    NaT    NaT
3   3       NaN       NaN    NaT    NaT
4   4  14:00:00       NaN    NaT    NaT 

   ID StartTime   EndTime         Hours1   Hours2
0   0  11:00:00  12:00:00  3600000000000 01:00:00
1   1  12:00:00  13:00:00  3600000000000 01:00:00
2   2  13:00:00  14:00:00  3600000000000 01:00:00
3   3       NaN       NaN            NaT      NaT
4   4  14:00:00       NaN            NaT      NaT

Теперь возникает вопрос: «Использование панд для выполнения дельта времени из столбцов 2" чч: мм: сс XX "в Microsoft Excel ".Я изменил название вопроса тоже.Спасибо за тех, кто ответил и попробовал.

Вопрос Как представить значение времени в часах вместо микросекунд?

1 Ответ

0 голосов
/ 06 декабря 2018

Кажется, что столбец StartTime отформатирован в вашем файле как текст.

Вы пробовали читать его с parse_dates вместе с функцией синтаксического анализа, заданной параметром date_parser?Должен работать аналогично read_csv(), хотя в документах нет перечисленных выше параметров явно , несмотря на то, что они доступны .

Примерно так:

pd.read_excel(r'./mydata.xls',
              parse_dates=['StartTime'],
              date_parser=lambda x: pd.datetime.strptime(x, '%I:%M:%S %p').time())

С учетом обновления :

pd.read_excel(r'./mydata.xls', parse_dates=['StartTime', 'EndTime'])
(df['EndTime'] - df['StartTime']).dt.seconds//3600

в качестве альтернативы

# '//' is available since pandas v0.23.4, otherwise use '/' and round
(df['EndTime'] - df['StartTime'])//pd.Timedelta(1, 'h') 

оба приводят к одному и тому же

0    1
1    1
2    1
dtype: int64
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...