Добавление секунд в столбец, содержащий только часы/минуты

#python #dataframe

#питон #фрейм данных

Вопрос:

У меня есть фрагмент кода, который принимает данные в формате csv и выполняет некоторые преобразования во фрейме данных. Один из столбцов в этом фрейме данных содержит время в HH:MM формате, однако мне нужно время, чтобы вернуться как HH:MM:SS .

Я попробовал следующее.

Пример CSV/DF:

Время Посещения
10:01
11:40

Версия 1

 df['Attended Time'] = pd.to_timedelta(df['Attended Time']   ':00', df['Attended Time'])  

и

Версия 2

 df['Attended Time'] = pd.to_timedelta( np.where(df['Attended Time'].str.count(':') == 1, df['Attended Time']   ':00', df['Attended Time']))  

V1 не заполняет мое время посещения секундами и

V2 дает мне мой результат, но добавляет 0 дней ко времени? Кто-нибудь знает, почему? пример 0 дней 10:01:00

Комментарии:

1. это может занять несколько секунд, но не отображать его, и вам, возможно, потребуется преобразовать в строку все значения, используя обычный strftime("%H:%m:%s") , перед отображением. И даже если вы добавите :00 и конвертируете обратно в to_timedelta или datetime или time , это все равно может пропустить секунды.

2. если у вас есть строки as, то вы должны добавлять только :00 без преобразования в timedelta df['Attended Time'] = df['Attended Time'] ':00'

3. или конвертируйте в datetime и получите .dt.time df['Attended Time'] = pd.to_datetime(df['Attended Time']).dt.time

Ответ №1:

Если у вас есть строки, вы можете только добавить :00

 df['Attended Time'] = df['Attended Time']  ':00'  

Если вам нужны datetime.time объекты, то

 df['Attended Time'] = pd.to_datetime(df['Attended Time']).dt.time  

Минимальный пример:

 import pandas as pd  data = {  'A': ['10:00', '12:00', '13:00'],  }  df = pd.DataFrame(data)  df['B'] = df['A']  ':00'  df['C'] = pd.to_datetime(df['A']).dt.time  print(df)  

Результат:

 A B C 0 10:00 10:00:00 10:00:00 1 12:00 12:00:00 12:00:00 2 13:00 13:00:00 13:00:00