You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.14 08:08:38