Неподдерживаемый тип для компонента timedelta секунд: numpy.int64 - PullRequest
0 голосов
/ 10 октября 2018

Я использую функцию timedelta из пакета datetime для преобразования секунд в формат часов и минут.

Вот пример:

secs = timedelta(seconds = 30)
print(secs)

00:00:30 

Когда запускается это для столбца панд, который мне нужно преобразовать, я сталкиваюсь с ошибкой неподдерживаемого типа.Похоже, это происходит, когда функция встречает «0» и, я думаю, не уверена, как ее обработать.

EmpComm = pd.DataFrame({
         'Duration (secs)':[3488, 2994,0, 0],
         'Duration (hh:mm)':['0:58:08','0:49:54',np.nan,np.nan],

})
print (EmpComm)
   Duration (secs) Duration (hh:mm)
0             3488          0:58:08
1             2994          0:49:54
2                0              NaN
3                0              NaN

Data sample

Мне интересно, почему он не может преобразовать секунды = 0 в 00:00:00.Вот мой код:

for i, row in EmpComm.iterrows():

    val = timedelta(seconds = EmpComm['Duration (secs)'].iloc[i])
    EmpComm['Duration (hh:mm)'][i] = val

1 Ответ

0 голосов
/ 10 октября 2018

Не используйте циклы с iterrows, потому что существует векторизованное решение.

Вам нужно to_timedelta с параметром unit:

EmpComm = pd.DataFrame({
         'Duration (secs)':[3488, 2994,0, 0],
         'Duration (hh:mm)':['0:58:08','0:49:54',np.nan,np.nan],

})

EmpComm['Duration (hh:mm)'] = pd.to_timedelta(EmpComm['Duration (secs)'], unit='s')
print (EmpComm)
   Duration (secs) Duration (hh:mm)
0             3488         00:58:08
1             2994         00:49:54
2                0         00:00:00
3                0         00:00:00
...