如何筛选每周最后几项?如何过滤JSON中周末的ISO 8601时间数据?
嘿,这两个问题都是处理时间相关数据时很常见的需求,我给你分不同工具的具体实现方案,你可以根据自己的场景选择:
问题1:如何筛选每周的最后几项数据?
用Python Pandas处理
如果你的数据是表格形式,Pandas是最方便的工具。核心思路是按周分组,然后提取每组的最后N条数据:
import pandas as pd # 示例数据 data = { 'date': ['2024-01-01', '2024-01-05', '2024-01-06', '2024-01-07', '2024-01-12'], 'value': [10, 20, 30, 40, 50] } df = pd.DataFrame(data) # 先把日期列转为datetime格式 df['date'] = pd.to_datetime(df['date']) # 按ISO标准周分组,取每组最后2条(可替换成你需要的数量) weekly_last_items = df.groupby(df['date'].dt.isocalendar().week).tail(2) print(weekly_last_items)
如果需要按自然周(比如周日或周一作为一周的起始)调整分组方式,可以用dt.to_period():
# 按周日结束的周分组,取最后2条 weekly_last_items = df.groupby(df['date'].dt.to_period('W-SUN')).tail(2)
用SQL处理
如果数据存在数据库里,用窗口函数就能轻松实现:
WITH ranked_data AS ( SELECT *, -- 按周分区,按日期倒序排名 ROW_NUMBER() OVER (PARTITION BY EXTRACT(WEEK FROM date_column) ORDER BY date_column DESC) AS rn FROM your_table ) -- 取每组排名前2的(即每周最后2条) SELECT * FROM ranked_data WHERE rn <= 2;
注意:不同数据库的周提取函数略有差异,比如MySQL用WEEK(date_column),SQL Server用DATEPART(WEEK, date_column),需要根据你的数据库调整。
问题2:过滤掉ISO 8601格式日期时间的周末条目
用Python处理JSON
先解析ISO 8601日期,然后判断是否为工作日,再过滤:
import json from datetime import datetime # 示例JSON数据 json_data = ''' [ {"id": 1, "datetime": "2024-01-06T12:00:00Z"}, {"id": 2, "datetime": "2024-01-07T13:00:00Z"}, {"id": 3, "datetime": "2024-01-08T14:00:00Z"}, {"id": 4, "datetime": "2024-01-09T15:00:00Z"} ] ''' # 加载数据 data = json.loads(json_data) # 过滤周末:weekday()返回0=周一,4=周五,5=周六,6=周日 filtered_data = [ item for item in data if datetime.fromisoformat(item['datetime'].replace('Z', '+00:00')).weekday() < 5 ] # 输出过滤后的结果 print(json.dumps(filtered_data, indent=2))
注:replace('Z', '+00:00')是因为Python的fromisoformat默认不支持带Z的ISO格式,转换后就能正常解析了。
用jq命令行处理
如果习惯用命令行处理JSON文件,jq是绝佳选择:
# 假设你的JSON文件名为data.json jq '[.[] | select(.datetime | strptime("%Y-%m-%dT%H:%M:%SZ") | .weekday | . != 0 and . != 6)]' data.json
解释:jq的strptime解析ISO格式后,.weekday返回0=周日,6=周六,所以我们过滤掉这两个值,保留工作日的条目。
内容的提问来源于stack exchange,提问作者Dr. Moe
相关产品推荐
相关产品推荐

