使用 pd.apply() 将列中的每个元素转换为列表,抓取第一个元素,并将其转换为日期时间

问题描述

我有一个只有一行的数据框(将来会更多,但我只是以此为例)。我正在尝试获取“SETTLEMENT_DATE”列。

print(prevIoUs["SETTLEMENT_DATE"])

0 2021-06-22 00:00:00.0

Name: SETTLEMENT_DATE,dtype: object

为了得到日期,我做了 list(prevIoUs["SETTLEMENT_DATE"])[0],结果是: '2021-06-22 00:00:00.0'。现在我使用以下方法将其转换为日期格式:

def create_datetime_object(pd_object):

date_time_str = list(pd_object)[0]
return datetime.strptime(date_time_str,"%Y-%m-%d %H:%M:%s.%f")

代码create_datetime_object(prevIoUs["SETTLEMENT_DATE"])

产量:datetime.datetime(2021,6,22,0)

以后会有多行数据,所以想用pd.apply()把这个函数应用到整列。但是当我这样做时,我得到:

prevIoUs["SETTLEMENT_DATE"] = prevIoUs["SETTLEMENT_DATE"].apply(create_datetime_object)

ValueError: time data '2' does not match format '%Y-%m-%d %H:%M:%s.%f

有谁知道我为什么会收到这个错误以及如何解决

解决方法

这应该有效:

previous["SETTLEMENT_DATE"] = previous.apply(lambda r : create_datetime_object(r.SETTLEMENT_DATE),axis=1)