Python Socrata API浮动时间戳过滤异常问题求助
解决方案:Socrata API 筛选过去一周且未签发的许可申请
嘿,作为Python和Socrata API的新手,你遇到的问题其实是对Socrata的查询规则不熟悉,我来一步步帮你搞定:
1. 解决received_date大于比较的报错问题
你之前直接写received_date > '2019-09-25T13:50:27.000'作为client.get()的参数,Python会把received_date当成一个未定义的变量,自然会抛出NameError。
Socrata API需要用**$where参数**来传递SQL风格的筛选条件,而不是直接写Python的运算符。对于日期比较,你可以直接在$where的字符串里写received_date > '你的日期字符串'。
2. 筛选issued_date为空的条目
要筛选没有issued_date的记录,在Socrata的查询语法里用issued_date IS NULL就行,把这个条件和日期筛选用AND拼接起来。
3. 实现每周自动更新(动态计算一周前的日期)
不用硬编码日期,我们可以用Python的datetime模块动态计算一周前的时间,转换成Socrata要求的ISO格式字符串(比如2024-05-20T12:34:56.000)。
完整代码示例
import pandas as pd from sodapy import Socrata from datetime import datetime, timedelta # 初始化Socrata客户端 client = Socrata("data.marincounty.org", "你的AppToken") # 替换成你的实际AppToken # 动态计算一周前的日期,转换成ISO格式 one_week_ago = datetime.now() - timedelta(weeks=1) # 格式化为Socrata需要的时间格式(保留毫秒) formatted_date = one_week_ago.strftime("%Y-%m-%dT%H:%M:%S.000") # 构建$where查询条件:过去一周提交 且 未签发许可 where_clause = f"received_date > '{formatted_date}' AND issued_date IS NULL" # 调用API获取数据 results = client.get("mkbn-caye", where=where_clause) # 转换成DataFrame results_df = pd.DataFrame.from_records(results) print(results_df)
额外说明
- 如果你的数据集使用的是UTC时间,建议把
datetime.now()换成datetime.utcnow(),避免时区差异导致的数据偏差。 - 如果需要分页获取大量数据,可以在
client.get()里加上limit和offset参数,比如client.get("mkbn-caye", where=where_clause, limit=1000, offset=0)。
内容的提问来源于stack exchange,提问作者noodle
相关产品推荐
相关产品推荐

