Преобразуйте все даты из столбца фрейма данных python

#python-3.x #pandas #dataframe #date

Вопрос:

У меня есть csv-файл, в котором есть столбец с датой вакцинации ppl в формате «ГГГГ-ММ-ДД» в виде строки. Затем моя цель — добавить X дней к соответствующей дате, причем X основано на вакцине, которую получил этот человек. Чтобы добавить дни к дате, я должен преобразовать строковую дату в дату iso, поэтому мне нужно зациклить каждый элемент в этом столбце, передавая эти даты. Я вроде как новичок в Python и не совсем понимаю, как с этим бороться.

Поэтому я прочитал и создал фрейм данных с пандами, затем я попробовал, как показано на рисунке: содержимое столбца df и для попытки

Я не знаю, почему я получаю эту ошибку, я пробовал разные способы справиться с ней, но не могу понять это.

Тнх

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

1. Не публикуйте изображения, предоставляйте свои данные и ожидаемый вывод в виде текста (конструктор фреймов данных), не зацикливайтесь 😉

2. pandas.pydata.org/docs/reference/api/pandas.to_datetime.html

3. df['date'] = pd.to_datetime(df['dtae']) ? где df — ваш фрейм данных.

Ответ №1:

Это связано с тем, что тип значений «str», а » str «не имеет метода «fromisoformat». Я бы рекомендовал вам преобразовать тип значений в «дата-время «вместо » str», чтобы вы могли делать все, что захотите, в отношении расчета даты, например, вычислять X дней с определенной даты.

Вы можете преобразовать значения из » str » в «дата-время» и сделать то, что вы хотите, следующим образом:

 import pandas as pd
import datetime
df_reduzido['vacina_dataAplicacao'] = pd.to_datetime(df_reduzido['vacina_dataAplicacao'] , format='%Y-%m-%d')
df_reduzido['vacina_dataAplicacao'] = df_reduzido['vacina_dataAplicacao']   datetime.datetime.timedelta(days=3)
print(df_reduzido['vacina_dataAplicacao'])  # 3 days added
 

Вы можете подробно изучить, как работать с датой и временем, здесь: https://docs.python.org/3/library/datetime.html

Ответ №2:

Спасибо за вашу помощь, Сангкеун. Просто хочу отметить, что по какой-то причине python возвращал мне ошибку со словами: «Ошибка атрибута: тип объекта» дата-время.дата-время «не имеет атрибута » дата-время»». Тогда я нашел решение, позвонив

 import datetime
from datetime import timedelta, date, datetime
 

Затем используйте » timedelta() «, как это:

 df_reduzido['vacina_dataAplicacao'] = ( pd.to_datetime(df_reduzido['vacina_dataAplicacao'] , format='%Y-%m-%d', utc=False)   timedelta(days=10) ).dt.date
 

В конце концов, я решил ().dt.date избавиться от времени pd.to_datetime() . Посмотрите, что я пытался установить utc=False , надеясь, что это сделает свою работу, но ничего не произошло. В любом случае,
я благодарен вам за помощь.

Проблема решена.