Преобразовать специальную строку времени в формат даты и времени

Первый фрейм данных можно преобразовать в формат даты и времени с помощью pandas. Во втором кадре данных пропущены некоторые поля во входной строке времени. Как правильно преобразовать строки времени в объект datetime?

import pandas as pd

data = [
    '+2h03m46s456ms',
]
df = pd.DataFrame(data, columns=['ts'])
df['ts'] = pd.to_datetime(df['ts'], format = "+%Hh%Mm%Ss%fms")
print(df)

data2 = [
    '0',
    '+456ms',
    '+46s456ms',
    '+3m46s456ms'
]
df2 = pd.DataFrame(data2, columns=['ts'])
#df2['ts'] = pd.to_datetime(df2['ts'], format = "+%Hh%Mm%Ss%fms")
print(df2)

Выход:

                       ts
0 1900-01-01 02:03:46.456
            ts
0            0
1       +456ms
2    +46s456ms
3  +3m46s456ms
1
0
63
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Это дельты времени, а не даты и времени. Используйте to_timedelta()

>>> pd.to_timedelta(pd.Series(data))
0   0 days 02:03:46.456000
dtype: timedelta64[ns]

>>> pd.to_timedelta(pd.Series(data2))
0          0 days 00:00:00
1   0 days 00:00:00.456000
2   0 days 00:00:46.456000
3   0 days 00:03:46.456000
dtype: timedelta64[ns]

Но если вы хотите, чтобы они были датой и временем, вы можете добавить их в t=0.

>>> pd.Timestamp(0) + pd.to_timedelta(pd.Series(data2))
0   1970-01-01 00:00:00.000
1   1970-01-01 00:00:00.456
2   1970-01-01 00:00:46.456
3   1970-01-01 00:03:46.456
dtype: datetime64[ns]

хороший ответ! какой-нибудь API для преобразования дельты времени обратно в исходную строку?

lucky1928 07.05.2024 15:57

@ Lucky1928 Не то чтобы я об этом знал, но я сам не особо работал с timedeltas.

wjandrea 07.05.2024 15:57

Другие вопросы по теме