Pandas按月份日期筛选DataFrame返回空结果的问题排查
问题排查与解决方案
核心问题
你提取的month、day列均为整数类型,筛选时使用字符串进行匹配,类型不匹配导致匹配失败,返回空DataFrame:
- 从
datetime对象的.month、.day属性获取的值默认为整数类型(int),对应值为9、2 - 筛选条件写的
'9'、'2'是字符串类型(str),int和str的等值判断结果为False,没有符合条件的数据被筛选出来。
修复方案
方案1:修改筛选条件为整数匹配
直接把筛选条件的引号去掉,用整数匹配即可:
data = data[data['month']==9] data = data[data['day']==2]
方案2:提取日期值时统一转为字符串
如果业务需要month、day列是字符串格式,提取时做类型转换即可:
data['month']= data['time'].apply(lambda x: str(x.month)) data['day']= data['time'].apply(lambda x: str(x.day))
更高效的简化写法
无需单独提取month、day列,直接通过pandas内置的datetime属性筛选,性能更高且代码更简洁:
data = data[(data['time'].dt.month == 9) & (data['time'].dt.day == 2)]
内容的提问来源于stack exchange,提问作者Sandeepa Kariyawasam
相关产品推荐
相关产品推荐

