以 Y/M/D 格式去除解析时间的噪声(小时)

Remove noise(hours) for parsing time in Y/M/D format

我正在解析我的数据集的日期,但遇到了很多 ParserError,因为小时的格式通常是错误的。我决定跳过时间,只关注年、月、日

这些是我日期的变体:

|开始日期 |

| --- |

| 2022 年 3 月 23 日6:00 |

| 2022 年 3 月 23 日 7:0 |

| 2022 年 3 月 23 日 7:|

| 2022 年 3 月 23 日 7 |

目前,只有第一个 date/row 用于解析数据。我目前跳过其他行,但我也想通过排除小时数来包括它们。


for date in df_en['Startdate']:

    try:

        parse(date).date()

    except Exception:

        pass

什么是正确的方法来解析其他日期而不必打扰时间?

我已尝试将时间转换为有效的小时格式。使用 pd.to_datetime 无效,因为时间格式是字符串 march 而不是数字 3。手动改成3,还是报错ValueError: unconverted data remains: :00。因此,几个小时都没有相关性,我只想跳过它。

来源:https://serveanswer.com/questions/converting-to-datetime-parsererror-unknown-string-format-2022-02-17-7


dates = ['December 1, 2021 6:00', 'March 23, 2022 6']

for date in dates:

    date.replace(' (\d{1})', ' 0\1')

    pd.to_datetime(date, format='%m %d, %Y %H')

    print(date)

最终目标:

|年份 |月份 |日 |

| --- | --- | --- |

| 2022 | 年三月 | 23 |

| 2022 | 年三月 |三月 |

我猜你可以只转储小时部分

dates = ['March 23, 2022 6:00', 'March 23, 2022 7:0', 'March 23, 2022 7:', 'March 23, 2022 7']
pd.to_datetime([' '.join(x.split(' ')[:-1]) for x in dates])
DatetimeIndex(['2022-03-23', '2022-03-23', '2022-03-23', '2022-03-23'], dtype='datetime64[ns]', freq=None)

之后你可以df['date'].dt.year提取年、月、日

如果您只需要 year/month/day 列,实际上不需要解析为日期时间。只需通过拆分和重新排列来处理字符串;例如:

import pandas as pd

df = pd.DataFrame({'Startdate': ['December 1, 2021 6:00', 'March 23, 2022 6']})

parts = df['Startdate'].str.split('\ |, ')

df['year'], df['month'], df['day'] = parts.str[2], parts.str[0], parts.str[1]

print(df)
#                Startdate  year     month day
# 0  December 1, 2021 6:00  2021  December   1
# 1       March 23, 2022 6  2022     March  23