如何在Python Pandas中验证DataFrame字符串的出生日期日范围
在Pandas中校验字符串日期的日部分合法性
问题说明
现有一个Pandas DataFrame,其中col1为字符串类型,数据示例如下:
| col1 |
|---|
| 14212614414 |
| 05261265140 |
| 82044114467 |
| ... |
需求是提取col1字符串的第5、6位(对应Python字符串索引[4:6]),判断该数值是否属于1-31的合法日期范围,最终生成包含布尔值结果的col2列,预期输出如下:
| col1 | col2 |
|---|---|
| 14212614414 | True |
| 05261265140 | True |
| 82044114467 | False |
| ... | ... |
实现方案
方法1:简洁的子串提取+范围判断
直接利用Pandas的字符串方法提取目标子串,转换为整数后用between()方法完成范围校验:
import pandas as pd # 构造示例DataFrame df = pd.DataFrame({ "col1": ["14212614414", "05261265140", "82044114467"] }) # 提取第5-6位字符,转整数后判断是否在1-31之间 df["col2"] = df["col1"].str[4:6].astype(int).between(1, 31)
方法2:带格式校验的处理(可选)
如果需要先验证提取的子串是纯数字(避免非数字字符导致转换错误),可以用apply()结合自定义逻辑:
def validate_day(s): day_str = s[4:6] if day_str.isdigit(): day = int(day_str) return 1 <= day <= 31 return False df["col2"] = df["col1"].apply(validate_day)
结果说明
两种方法都会为DataFrame新增col2列:
- 当提取的日数值在1-31区间内时,
col2值为True - 若数值超出范围或提取的子串不是有效数字,
col2值为False
内容的提问来源于stack exchange,提问作者dingaro
相关产品推荐
相关产品推荐

