在Pandas中筛选Excel数据集本周里程碑数据遇属性错误求助
问题描述
需使用Pandas筛选Excel数据集,仅保留**2023-01-16至2023-01-20(本周)**的Next Milestone Date数据,同时去除日期格式中的时间部分。执行代码时触发错误:AttributeError: type object 'datetime.datetime' has no attribute 'weekdays',需修复错误并完成筛选需求。
数据集示例
Num Name Type Status Current % Next Milestone Date 1 sam - Open 54% 2023-01-16 00:00:00 2 Dave - Open 54% 2023-01-20 00:00:00 3 Jake - Open 45% 2023-01-13 00:00:00 4 Oli - Open 30% 2023-01-31 00:00:00
错误原因分析
代码中datetime.weekdays(datetime.today())写法错误:
datetime.datetime类没有名为weekdays的属性,正确的实例方法是单数形式的weekday()- 原代码逻辑冗余复杂,完全可以通过Pandas内置的日期处理功能简化实现
解决方案
方案1:固定日期范围筛选(匹配需求中的2023-01-16至2023-01-20)
import pandas as pd from datetime import datetime # 模拟读取Excel数据(实际场景替换为pd.read_excel("你的文件路径.xlsx")) data = { 'Num': [1,2,3,4], 'Name': ['sam','Dave','Jake','Oli'], 'Type': ['-','-','-','-'], 'Status': ['Open','Open','Open','Open'], 'Current %': ['54%','54%','45%','30%'], 'Next Milestone Date': ['2023-01-16 00:00:00','2023-01-20 00:00:00','2023-01-13 00:00:00','2023-01-31 00:00:00'] } dataset = pd.DataFrame(data) # 1. 转换日期列,去除时间部分 dataset['Next Milestone Date'] = pd.to_datetime(dataset['Next Milestone Date']).dt.date # 2. 定义目标日期范围 start_date = datetime(2023,1,16).date() end_date = datetime(2023,1,20).date() # 3. 筛选符合条件的数据 dataset_modified = dataset[(dataset['Next Milestone Date'] >= start_date) & (dataset['Next Milestone Date'] <= end_date)] print(dataset_modified)
方案2:动态计算本周范围(适配任意当前日期)
如果需要自动基于当前日期计算本周(周一至周五)范围,可使用以下代码:
import pandas as pd from datetime import datetime, timedelta # 固定当前日期为2023-01-20(实际场景替换为datetime.today().date()) today = datetime(2023,1,20).date() # 计算本周一和本周五的日期 week_start = today - timedelta(days=today.weekday()) week_end = week_start + timedelta(days=4) # 转换日期列并筛选 dataset['Next Milestone Date'] = pd.to_datetime(dataset['Next Milestone Date']).dt.date dataset_modified = dataset[(dataset['Next Milestone Date'] >= week_start) & (dataset['Next Milestone Date'] <= week_end)]
最终筛选结果
Num Name Type Status Current % Next Milestone Date 0 1 sam - Open 54% 2023-01-16 1 2 Dave - Open 54% 2023-01-20
内容的提问来源于stack exchange,提问作者Jaaz Douglas
相关产品推荐
相关产品推荐

