Pandas DataFrame日期列或条件过滤报错:如何筛选空值/近一年数据?
问题解决方法
错误原因分析
- 第一个代码报错:
df['closed_date'].isnull是方法引用而非调用,必须加括号isnull()来生成每个元素是否为null的布尔值Series,否则和前面的日期条件用|运算时,会出现类型不匹配(一边是布尔Series,一边是方法对象)。 - 后两个代码报错:在Pandas中对Series做元素级逻辑或必须用
|,不能用Python原生的or。or会试图判断整个Series的真假,这在Pandas里属于歧义操作(无法确定是要求所有元素为真还是至少一个为真),因此抛出ValueError。
正确代码
from datetime import datetime as dt, timedelta as td # 先计算一年前的日期,让代码更清晰 one_year_ago = dt.today() - td(days=365) # 用|做元素级逻辑或,同时确保isnull()被调用 df = df[(df['closed_date'] > one_year_ago) | (df['closed_date'].isnull())]
你也可以用isna()替代isnull(),两者功能完全一致:
df = df[(df['closed_date'] > one_year_ago) | (df['closed_date'].isna())]
内容的提问来源于stack exchange,提问作者JarvisButler290
相关产品推荐
相关产品推荐

