Как правильно конвертировать строку даты и времени в формат датывремени?

Данные даты и времени берутся из датасета, где они записаны в следующим образом:

(datetime.datetime(2021, 11, 3, 11, 0, 3, tzinfo=datetime.timezone(datetime.timedelta(0), 'UTC')),)
(datetime.datetime(2021, 11, 3, 11, 0, 15, tzinfo=datetime.timezone(datetime.timedelta(0), 'UTC')),)
(datetime.datetime(2021, 11, 3, 11, 0, 16, tzinfo=datetime.timezone(datetime.timedelta(0), 'UTC')),)

Не могу понять, как их преобразовать к формату датывремени?

Приведенные пример - это выборка одной строки из столбца датасета, если смотреть на тип данных, то это будет str.

print(my_df['datetime'][0])
print(type(my_df['datetime'][0]))

(datetime.datetime(2021, 11, 3, 11, 0, 3, 
tzinfo=datetime.timezone(datetime.timedelta(0), 'UTC')),)
<class 'str'>

Ответы (2 шт):

Автор решения: Dmitry

Сложно понять, что вы подразумеваете, но сейчас это тип данных tuple. Обратиться к нему можно по индексу. То есть я создам переменную, куда положу ваши данные и поиграюсь

>>> import datetime
>>> a = (datetime.datetime(2021, 11, 3, 11, 0, 3, tzinfo=datetime.timezone(datetime.timedelta(0), 'UTC')),)
>>> type(a) # спросим какой тип данных у переменной а
<class 'tuple'>
>>> type(a[0]) # здесь обращение по индексу к нулевому члену кортежа
<class 'datetime.datetime'>
>>> a[0].isoformat() # здесь говорю, что нулевую запись кортежа пробразовать в формат ISO
'2021-11-03T11:00:03+00:00'
→ Ссылка
Автор решения: strawdog

Насколько я понял, данные формата datetime хранятся у вас в csv как есть, то есть, при прочтении в датафрейм они получаются в строковом формате.

В таком случае предлагаю сделать так:

dates = pd.DataFrame(df['datetime'].str.extractall('(\d+)').unstack().values[:,:-1].astype(int), columns=["year", "month", "day", "hour", "minute", "second"])
df["new_datetime"] = pd.to_datetime(dates)
df = df.drop("datetime", axis=1)

теперь ваш df:

         new_datetime
0 2021-11-03 11:00:03
1 2021-11-03 11:00:15
2 2021-11-03 11:00:16

ну и тип данных:

<class 'pandas.core.frame.DataFrame'>
RangeIndex: 3 entries, 0 to 2
Data columns (total 1 columns):
 #   Column        Non-Null Count  Dtype         
---  ------        --------------  -----         
 0   new_datetime  3 non-null      datetime64[ns]
dtypes: datetime64[ns](1)
→ Ссылка