我有一个数据框,像这样从一列分成两列。
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')
答案 0 :(得分:3)
首先使用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
对象的datetime.date
dtype系列,而不是有效的 Pandas datetime
系列。
以下是通过将Python datetime.date
或datetime.datetime
对象与Pandas结合使用而导致的问题的4个示例: