适用于日期差异 returns NaT

apply on date difference returns NaT

我正在尝试向列表中的所有日期添加负日

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)   

但是,应该包含原始日期减 1 的 eventdate 都是 NaT。

使用 pd.TimedeltaDataFrame 中进行日期操作。

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

您通常应该尽可能避免使用 Dataframe.apply。请参阅 了解为什么它会很慢。