如何在Pandas中删除不满足年末日期条件的数据行?
解决Pandas筛选年末行的报错问题
错误原因
你使用df['date'] not in list时,是将整个Series与列表做比较,Pandas无法确定整个Series的布尔值,因此抛出ValueError: The truth value of a Series is ambiguous错误。
解决方案
方法一:使用isin()方法匹配目标日期
用Series的isin()方法生成布尔索引,判断每个元素是否在目标列表中,再进行筛选:
# 定义目标年末日期列表 target_dates = [199912,200012,200112,200212,200312,200412,200512,200612,200712,200812,200912,201012,201112,201212,201312,201412,201512,201612,201712,201812,201912,202012,202112,202212] # 直接筛选保留符合条件的行(推荐,比drop更高效) df2 = df[df['date'].isin(target_dates)] # 或者用drop方式删除不符合的行 df2 = df.drop(df[~df['date'].isin(target_dates)].index)
方法二:通过日期规则自动匹配年末行(更灵活)
不需要手动生成目标列表,直接判断日期的最后两位是否为12:
- 如果
date是数值类型:
df2 = df[df['date'] % 100 == 12]
- 如果
date是字符串类型:
df2 = df[df['date'].str.endswith('12')]
这个方法无需维护固定的日期列表,自动适配所有年末行,适用性更强。
内容的提问来源于stack exchange,提问作者roi dayan
相关产品推荐
相关产品推荐

