我有一个数据框,我将其从一列分成两列,如下所示。
df_all_files = pd.DataFrame(df_all_files.string.str.split('.',1).tolist(), columns = ['string','the_date'])
这给了我一堆文件扩展名和一堆日期,都在同一列中。我想将任何看起来可能是日期的内容强制转换为实际日期,并删除任何不是日期的内容。这可行吗?
这是我之前的示例。
string the_date
-rw-r--r-- 64 30067 10224 616 Nov 01 17:46 ASEJPN_ModelHolidays 20181101
-rw-r--r-- 64 30067 10224 616 Dec 03 19:23 ASEJPN_ModelHolidays 20181201
-rw-r--r-- 74 30067 10224 4938 Oct 04 03:28 AS1181003 RATE
这就是我想要的样子。
string the_date
-rw-r--r-- 64 30067 10224 616 Nov 01 17:46 ASEJPN_ModelHolidays 20181101
-rw-r--r-- 64 30067 10224 616 Dec 03 19:23 ASEJPN_ModelHolidays 20181201
-rw-r--r-- 74 30067 10224 4938 Oct 04 03:28 AS1181003 181003
现在,我正在运行这个单行代码。
df_all_files['the_date'] = df_all_files['the_date'].dt.date
我收到此错误。
AttributeError: Can only use .dt accessor with datetimelike values
我也尝试过这个。
df_all_files['the_date'] = df_all_files['string'].astype('datetime64[ns]')
一旦遇到非日期,就会出现此错误。
ValueError: ('Unknown string format:', 'ach1')
最佳答案
使用 pd.to_datetime
将您的系列转换为 datetime
首先,使用errors='coerce'
确保不可转换的值被 NaN
替换:
df_all_files['the_date'] = pd.to_datetime(df_all_files['the_date'], errors='coerce').dt.date
但是,我强烈建议您避免转换为 dt.date
因为这会将您的系列转换为 object
dtype系列datetime.date
对象,而不是高效的 Pandas datetime
系列。
以下是使用 Python 引起的问题的 4 个示例 datetime.date
或datetime.datetime
带有 Pandas 的对象:
关于python - 将字符串转换为日期并删除数据框一列中的非日期,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54100778/