Pandas按日期条件删行时Series转int报错及高效写法咨询
错误原因
你运行报错的核心原因是df.START_DATE是pandas的Series对象(整列数据),而非单个字符串值,不能直接用Python原生的int()函数对整列做转换,同时你写的过滤逻辑也存在错误:小于2019和大于2020是互斥条件,用&(与)运算符永远筛选不到符合条件的行,应该用|(或)运算符。
解决方案
推荐两种向量化实现方式,效率远高于遍历行的写法:
方案1:START_DATE列为字符串类型时直接处理
用pandas的.str向量化字符串访问器提取年份,再转成整数做筛选,直接用布尔索引保留符合要求的行即可,无需手动调用drop:
# 保留年份在2019-2020之间的行 df = df[df['START_DATE'].str[:4].astype(int).between(2019, 2020)]
如果一定要用drop写法实现删除逻辑,写法如下:
df = df.drop(df[~df['START_DATE'].str[:4].astype(int).between(2019, 2020)].index)
方案2(更推荐):先转日期类型再筛选
将START_DATE列转为pandas datetime类型后,可以直接通过.dt访问器取年份,后续做其他日期相关操作也更灵活:
# 转日期类型 df['START_DATE'] = pd.to_datetime(df['START_DATE']) # 按年份筛选 df = df[df['START_DATE'].dt.year.between(2019, 2020)]
内容的提问来源于stack exchange,提问作者liam beck
相关产品推荐
相关产品推荐

