【问题标题】:Fetch datetime from strings faster from pandas dataframe从熊猫数据框中更快地从字符串中获取日期时间
【发布时间】:2019-08-25 23:14:05
【问题描述】:

从数据中提取日、月、年、小时、工作日、日月年,然后放入列中

数据列:

+----------------------+
|         Date         |
+----------------------+
| '11/28/17  00:36 '   |
| '11/28/17  01:15 AM' |
| 'abc'                |
| 11/28/17  01:28 '    |
| 'pqr'                |
+----------------------+

目标:

+-----+-------+------+---------+------+-----------------+
| Day | Month | Year | Weekday | Hour | Day_month_year  |
+-----+-------+------+---------+------+-----------------+
| 28  | Nov   | 2017 | Tue     | 00   | 2017-11-28      |
| 28  | Nov   | 2017 | Tue     | 01   | 2017-11-28      |
| Nan | Nan   | Nan  | Nan     | Nan  | Nan             |
| 28  | Nov   | 2017 | Tue     | 01   | 2017-11-28      |
| Nan | Nan   | Nan  | Nan     | Nan  | Nan             |
+-----+-------+------+---------+------+-----------------+

代码:

df['datetime'] = pd.to_datetime(df['Date'],infer_datetime_format=True,errors='coerce')
df['Day'] = df['datetime'].dt.strftime('%d')
df['Month'] = df['datetime'].dt.strftime('%b')
df['Year'] = df['datetime'].dt.strftime('%Y')
df['WeekDay'] = df['datetime'].dt.strftime('%a')
df['Hour'] = df['datetime'].dt.strftime('%H')
df['Day_month_year'] = pd.to_datetime(df['datetime']).dt.to_period('D')

这些代码行需要很长时间,因为我的 Date 列没有特定的数据格式,并且几乎没有无法解析为 datetime 的值。是否有更快的方法来执行此操作,因为我的 Date 列有近 40k 条记录。

【问题讨论】:

标签: python pandas datetime optimization


【解决方案1】:

使用pd.to_datetime:

s = pd.to_datetime(df['Date'], errors='coerce')
df['Day'] = s.dt.day
df['Month'] = s.dt.month
df['Year'] = s.dt.year
df['Weekday'] = s.dt.strftime('%a')
df['Hour'] = s.dt.hour
df['Day_Month_Year'] = s.dt.date

输出:

                 Date   Day  Month    Year Weekday  Hour Day_Month_Year
0    11/28/17  00:36   28.0   11.0  2017.0     Tue   0.0     2017-11-28
1  11/28/17  01:15 AM  28.0   11.0  2017.0     Tue   1.0     2017-11-28
2                 abc   NaN    NaN     NaN     NaT   NaN            NaT
3    11/28/17  01:28   28.0   11.0  2017.0     Tue   1.0     2017-11-28
4                 pqr   NaN    NaN     NaN     NaT   NaN            NaT

这些列被转换为浮点数,因为它们必须处理NaN。它们很容易转换为int

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2022-11-18
    • 2019-06-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-05-07
    • 2018-12-06
    • 2019-07-21
    相关资源
    最近更新 更多