将字符串转换为日期,并删除数据框一栏中的非日期

时间:2019-01-08 22:43:14

标签: python python-3.x pandas datetime

我有一个数据框,像这样从一列分成两列。

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')

1 个答案:

答案 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.datedatetime.datetime对象与Pandas结合使用而导致的问题的4个示例:

  1. TypeError: Cannot compare type 'Timestamp' with type 'date'
  2. Parse a Pandas column to Datetime
  3. Why my code didn't select data from Pandas dataframe?
  4. Filtering pandas dataframe by day