#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
, надеясь, что это сделает свою работу, но ничего не произошло. В любом случае,
я благодарен вам за помощь.
Проблема решена.