如何按日期格式筛选Pandas数据框列?混合格式列分离咨询
按不同日期格式拆分Pandas数据框
没问题,我来帮你搞定这个需求!你想要按不同日期格式拆分数据框,核心是用正则表达式来匹配不同格式的日期字符串——直接用is是行不通的,因为is是用来判断对象身份的,不是匹配字符串格式的。
具体实现步骤
首先,我们需要针对两种日期格式写出对应的正则表达式,然后用Pandas的str.match()方法来筛选行:
匹配
%d%b%y格式(比如05Jan23、12Dec22)
对应的正则是r'^\d{2}[A-Za-z]{3}\d{2}$',拆解一下:^和$确保匹配整个字符串,不会误匹配包含该格式的长字符串\d{2}匹配两位数字(日期部分)[A-Za-z]{3}匹配三个字母的月份缩写(兼容大小写)\d{2}匹配两位数字(年份部分)
匹配
%b%y格式(比如Jan23、Oct21)
对应的正则是r'^[A-Za-z]{3}\d{2}$',也就是三个字母的月份缩写加两位数字。
完整代码示例
import pandas as pd import re # 用于忽略大小写匹配 # 示例数据框(替换成你自己的真实数据即可) data = {'Cl_date': ['05Jan23', 'Jan23', '18Feb22', 'Feb22', '31Mar21', 'Mar21', 'InvalidDate']} df = pd.DataFrame(data) # 筛选%d%b%y格式的行,忽略大小写 df1 = df[df['Cl_date'].str.match(r'^\d{2}[A-Za-z]{3}\d{2}$', flags=re.IGNORECASE)] # 筛选%b%y格式的行,忽略大小写 df2 = df[df['Cl_date'].str.match(r'^[A-Za-z]{3}\d{2}$', flags=re.IGNORECASE)]
运行后,df1会包含所有日+月缩写+年格式的行,df2则包含月缩写+年格式的行,不符合格式的行(比如示例里的InvalidDate)会被自动排除。
内容的提问来源于stack exchange,提问作者A.DS
相关产品推荐
相关产品推荐

