0

I'm trying to add a negative day to all the days in a list

def datediff(xdate):
  return(xdate - timedelta(days=1))

data_ = [['tom', '2022-12-01'], ['nick', '2022-12-01'], ['juli', '2021-06-08']]
data_ = pd.DataFrame(data_, columns = ['Name', 'eventdate'])

pd.DataFrame(index=data_.eventdate, data=data_, columns=['eventdate']).apply(datediff)   

However, the eventdate, that should contain the original date minus 1, is all NaT.

Dario Federici
  • 1,228
  • 2
  • 18
  • 40

1 Answers1

1

Use a pd.Timedelta to do date manipulations in a DataFrame.

In [47]: data_ = [['tom', '2022-12-01'], ['nick', '2022-12-01'], ['juli', '2021-06-08']]
    ...: data = pd.DataFrame(data_, columns = ['Name', 'eventdate'])

In [48]: data
Out[48]:
   Name   eventdate
0   tom  2022-12-01
1  nick  2022-12-01
2  juli  2021-06-08

# data.eventdate is a string so we convert it to a datetime before subtracting a timedelta
In [49]: data.eventdate = data.eventdate.astype('datetime64') - pd.Timedelta('1 day')

In [50]: data
Out[50]:
   Name  eventdate
0   tom 2022-11-30
1  nick 2022-11-30
2  juli 2021-06-07

You should typically avoid using Dataframe.apply when you can. See this answer as to why it can be quite slow.

aydow
  • 3,673
  • 2
  • 23
  • 40