以 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
。因此,几个小时都没有相关性,我只想跳过它。
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
我正在解析我的数据集的日期,但遇到了很多 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
。因此,几个小时都没有相关性,我只想跳过它。
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