熊猫-无法将字符串转换为日期时间

时间:2019-10-15 07:09:58

标签: string pandas dataframe lambda strftime

我有一个datframe,用于存储文本文件中的一些信息,该信息为我提供了有关执行作业的详细信息。

我将所有这些信息存储在一个名为“ df_tmp”的数据框中。在该数据帧上,我有一列“ end_Date”,我想在其中存储文件的结束日期,即文件的最后一行,但是如果在数据帧中我没有任何值,我想存储current_time。

想象一下,我文件中的信息在以下变量上:

string_from_my_file = 'Execution time at 2019/10/14 08:06:44'

我需要的是

如果我的手册文件的最后一行没有任何日期,我想存储current_time。 为此,我正在尝试使用此代码:

now = dt.datetime.now()
current_time = now.strftime('%H:%M:%S')
df_tmp['end_date'] = df_tmp['end_date'].fillna(current_time).apply(lambda x: x.strftime('%Y-%m-%d %H:%M:%S') if not pd.isnull(x) else pd.to_datetime(re.search("([0-9]{4}\/[0-9]{2}\/[0-9]{2}\ [0-9]{2}\:[0-9]{2}\:[0-9]{2})", str(df_tmp['string_from_my_file']))[0]))  

但是,它给了我以下错误:

builtins.AttributeError: 'str' object has no attribute 'strftime'

我做错了什么?

谢谢

1 个答案:

答案 0 :(得分:1)

尝试一下:

df_tmp['end_date'] = df_tmp['end_date'].fillna(current_time).apply(lambda x: pd.to_datetime(x).strftime('%Y-%m-%d %H:%M:%S') if not pd.isnull(x) else pd.to_datetime(re.search("([0-9]{4}\/[0-9]{2}\/[0-9]{2}\ [0-9]{2}\:[0-9]{2}\:[0-9]{2})", str(df_tmp['string_from_my_file']))[0])) 

在这部分lambda x: pd.to_datetime(x).strftime('%Y-%m-%d %H:%M:%S'中,需要将x更改为日期时间才能应用strftime()

可能的错误原因: 即使end_date列的类型为datetime,但是您仍用str类型的值填充该列。这正在更改end_date列的数据类型。