python - 用于保持正确的日期和时间值的正则表达式

标签 python pandas dataframe

我有两个 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_datetimeerrors='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/

相关文章:

python - Eclipse + PyDev 在大量导入时变得极其缓慢

python - 正则表达式匹配多个重复组

python - Pandas DataFrame.write_parquet() 并设置 Zstd 压缩级别

python - 使用 Dask DataFrame 计算前向差异?

python - 训练gensim word2vec模型后单词不在词汇表中,为什么?

python - 使用 pip 安装 Mayavi - 没有名为 vtk 的模块

python - 类应该包括所有可以在 y 中的有效标签

python - 将预定义的数字分配给数据框中的列行值

r - setkey 和 := operator, 数据表,R

python - 按开始/结束时间戳对数据帧行进行分组