Pandas - 无法将字符串转换为日期时间
Pandas - Can't cast string to datetime
我有一个 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'
我做错了什么?
谢谢
试试这个:
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
列的类型为日期时间,但您正在用具有 str
类型的值填充该列。这正在更改 end_date
列的数据类型。
我有一个 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'
我做错了什么?
谢谢
试试这个:
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
列的类型为日期时间,但您正在用具有 str
类型的值填充该列。这正在更改 end_date
列的数据类型。