【问题标题】:SODA API FilteringSODA API 过滤
【发布时间】:2019-02-19 21:14:14
【问题描述】:

我正在尝试使用他们的 SODA API 过滤 ny gov 开放数据库。我正在关注有关如何过滤的文档,但它返回一个空数据框。

# noinspection PyUnresolvedReferences
import numpy as np
# noinspection PyUnresolvedReferences
import pandas as pd
# noinspection PyUnresolvedReferences
from sodapy import Socrata


clientNYgov = Socrata('data.ny.gov', None)

这是我试图仅在纽约找到结果的地方。

databaseM = clientNYgov.get('yg7h-zjbf.csv?business_city=NEW+YORK')

dfDatabaseM = pd.DataFrame.from_records(databaseM)

dfDatabaseM.to_csv('Manhattan Agents.csv')
print(dfDatabaseM)

但这里是空输出:

0                   1   ...              9             10
0  business_address_1  business_address_2  ...  license_number  license_type

[1 rows x 11 columns]

Process finished with exit code 0

如果我的过滤方式有问题,请告诉我,不太确定这里出了什么问题。提前非常感谢!

【问题讨论】:

    标签: python-3.x socrata soda


    【解决方案1】:

    有两种使用过滤器的方法。

    方法一

    这可以使用Socrata() 来完成,方法是将filters using SQL 传递给实例化Socrata 客户端的get() 方法中的query 关键字。您将需要一个application token。如果您不使用令牌,那么您的请求将是subjected to throttling。为避免节流,sign up for a socrata accountcreate your app token

    query = f"""SELECT * WHERE business_city="NEW YORK" LIMIT 50000"""
    client = Socrata("data.ny.gov", <YOUR-APP-TOKEN-HERE>)
    results = client.get("yg7h-zjbf", query=query)
    df_socrata = pd.DataFrame.from_records(results)
    

    方法二

    使用 JSON 端点(与 @Joseph Gattuso 的 answer 相同)

    data = requests.get(
        "http://data.ny.gov/resource/yg7h-zjbf.json?"
        "$limit=50000&"
        "business_city=NEW YORK"
    ).json()
    df = pd.DataFrame.from_records(data)
    

    输出比较 - 验证两种方法是否返回相同的结果

    assert df_socrata.equals(df)
    

    【讨论】:

    • 谢谢!第一种方法效果很好
    【解决方案2】:

    Socrata 使用 json 端点通过 API 导出文件。选择 API 时,可以在数据集的右上角找到它。对于这个解决方案,我只使用请求来检索数据。 Soda 模块很好用,但与请求相同。

    import pandas as pd
    import requests
    
    data=requests.get('http://data.ny.gov/resource/yg7h-zjbf.json?$limit=50000&business_city=NEW YORK').json()
    df=pd.DataFrame.from_records(data)
    df
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多