Home > Software design >  Convert all dates from a data frame column python
Convert all dates from a data frame column python

Time:10-30

I have a csv file that have a column with the date that ppl get vaccinated, in format 'YYYY-MM-DD' as string. Then, my goal its add X days to the respective date, with X based on the vaccine that these person got. In order to add days to a date, i've to convert the string date to iso date, so i need to loop each element in that column conveting those dates. Im kinda new to Python and im not getting really right how do deal with it.

So i read and create a data frame with pandas, then i tryed as follow in the image: df column content and for try

I dont know why im getting this error, i tryed different ways to deal with it but cant figure it out.

Thx

CodePudding user response:

This is because the type of values is 'str,' and 'str' does not have 'fromisoformat' method. I would recommend you to convert a type of the values to 'datetime' instead of 'str,' so that you can do whatever you want regarding date calculation such as calculating X days from a specific date.

You can convert the values from 'str' to 'datetime' and do what you want as follows:

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

You can study how to deal with datetime in detail here: https://docs.python.org/3/library/datetime.html

CodePudding user response:

Thanks for your help Sangkeun. Just want to point out that, for some reason, python was returning me error saying: "'AttributeError: type object 'datetime.datetime' has no attribute 'datetime'". Then i've found a solution by calling

import datetime
from datetime import timedelta, date, datetime

Then using " timedelta() ", like this:

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

At the end, i set ().dt.date in order to rid off the time from pd.to_datetime(). Look that i tryed to set utc=False hoping that this would do the job but nothing happened. Anyway, i'm grateful for your help.

Problem solved.

  • Related