如何解决判断日期是否在两日期区间时的TypeError错误
问题解决:日期区间哑变量生成报错修复
错误原因
你写的2022-02-13会被Python解析成整数运算:2022-2-13=1997,是int类型,而df['Date']里的元素是Timestamp类型,两种类型无法直接用<=比较,因此抛出TypeError。
修复方案
方法1:构造Timestamp日期对象进行比较
把用于判断的日期字符串转为Timestamp类型,和Date列元素类型匹配:
import pandas as pd data = {'Date': ['2022-01-02', '2022-01-13','2022-02-12','2022-02-15']} df = pd.DataFrame(data) # 确保Date列为datetime类型(若未自动转换) df['Date'] = pd.to_datetime(df['Date']) # 定义区间日期 start_date = pd.Timestamp('2022-02-11') end_date = pd.Timestamp('2022-02-13') # 生成哑变量 df['2/11-2/13 DV'] = df['Date'].apply(lambda x: 1 if (start_date <= x <= end_date) else 0)
方法2:向量化布尔运算(更高效,推荐)
Pandas支持直接对整列做布尔运算,无需apply,执行速度更快:
import pandas as pd data = {'Date': ['2022-01-02', '2022-01-13','2022-02-12','2022-02-15']} df = pd.DataFrame(data) df['Date'] = pd.to_datetime(df['Date']) # 直接通过列运算生成哑变量,Pandas会自动转换日期字符串为Timestamp df['2/11-2/13 DV'] = ((df['Date'] >= '2022-02-11') & (df['Date'] <= '2022-02-13')).astype(int)
最终结果
运行后DataFrame内容:
| Date | 2/11-2/13 DV |
|---|---|
| 2022-01-02 | 0 |
| 2022-01-13 | 0 |
| 2022-02-12 | 1 |
| 2022-02-15 | 0 |
内容的提问来源于stack exchange,提问作者James Rush
相关产品推荐
相关产品推荐

