如何用Pandas创建列判断日期是否在指定区间内
解决方法
要给DataFrame添加validDate列,判断eventDate是否在指定日期范围内,可按以下步骤操作:
1. (推荐)转换日期列类型
先把字符串类型的eventDate转为datetime类型,避免字符串比较可能出现的异常:
import pandas as pd # 假设你的DataFrame名为df df['eventDate'] = pd.to_datetime(df['eventDate'])
如果列中存在无效日期字符串,可添加errors='coerce'参数将无效值转为NaT,这类值后续会被判定为No:
df['eventDate'] = pd.to_datetime(df['eventDate'], errors='coerce')
2. 生成validDate列
方法一:用numpy.where快速判断
import numpy as np # 先把起止日期转为datetime类型 startDate = pd.to_datetime('2005-01-20') endDate = pd.to_datetime('2010-08-20') # 按条件生成新列 df['validDate'] = np.where((df['eventDate'] >= startDate) & (df['eventDate'] <= endDate), 'Yes', 'No')
方法二:用apply自定义函数判断
如果偏好更直观的函数式写法:
startDate = pd.to_datetime('2005-01-20') endDate = pd.to_datetime('2010-08-20') def check_date_validity(date): return 'Yes' if startDate <= date <= endDate else 'No' df['validDate'] = df['eventDate'].apply(check_date_validity)
方法三:直接用字符串比较(不推荐但可行)
由于ISO格式的日期字符串按字典序排列的顺序和时间顺序一致,也可以直接用字符串比较:
startDate = '2005-01-20' endDate = '2010-08-20' df['validDate'] = np.where((df['eventDate'] >= startDate) & (df['eventDate'] <= endDate), 'Yes', 'No')
内容的提问来源于stack exchange,提问作者kunshabba
相关产品推荐
相关产品推荐

