我有两个 df 列,其中包含如下字符串:
**date** **time**
12JUN19 0900
34JUN19 1095
101jun19 11145
01jun19 2559
我想排除值与 DDMMMYY 和 HM 结构不匹配的所有日期和时间,并且我还想过滤掉超出可能的日、小时和分钟值的值。我过滤日期和时间结构,如下所示:
df['date'] = df['date'].str.extract('(\d{2}[a-zA-Z]{3}[0-9]{2}$)', expand=False)
df['time'] = df['time'].str.extract('^(\d{4})$', expand=False)
我们的数据结果如下所示:
**date** **time**
12JUN19 0900
34JUN19 1095
NaN NaN
01jun19 2559
我现在还想排除字符串的日部分大于 31 的日期以及小时部分超过 24 或分钟部分超过 59 的日期。我有单独的函数来纠正这些值。现在我只想用 NaN 替换不正确的值。希望得到一些帮助,所需的输出应该是这样的:
**date** **time**
12JUN19 0900
NaN NaN
NaN NaN
01jun19 NaN
编辑:我不想在此处将日期和时间转换为数据和时间数据类型,因为稍后用于更正值的例程需要字符串,谢谢。
最佳答案
您可以将 pd.to_datetime
与 errors='coerce'
选项一起使用:
df.loc[pd.to_datetime(df['date'], errors='coerce').isna(),
'date'] = np.nan
df.loc[pd.to_datetime(df['time'], format='%H%M', errors='coerce').isna(),
'time'] = np.nan
输出:
date time
0 12JUN19 0900
1 NaN NaN
2 NaN NaN
3 01jun19 NaN
关于python - 用于保持正确的日期和时间值的正则表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67371582/