将 gps 坐标映射到人口普查区 Python

Mapping gps coordinates with census tract Python

我还没有找到解决我正在做的一个小项目的困惑的答案。

我的目标是在我的数据框中匹配人口普查块 ID / block_fips 到 lat/lon 对。

我之前没有使用 API 来补充 Python 中的数据。

这是经纬度坐标数据集的片段:

import pandas as pd
df = pd.DataFrame({'lat': [40.760659, 40.768254, 40.761573], 'lon': [-73.980420, -73.988639, -73.972628]})
print(df)

我遇到了人口普查转换 API https://www.fcc.gov/census-block-conversions-api。如果使用区域 API,我如何 (1) 获取然后 (2) 将“block_fips”匹配到第一个 lat/lon 对,在本例中使用 [= 的“360610131001003” 32=] 在 Anaconda 环境中的 Jupyter notebook 中。

我希望的输出是:

dfcensus = pd.DataFrame({'lat': [40.760659, 40.768254, 40.761573], 'lon': [-73.980420, -73.988639, -73.972628], 'block': [360610131001003, 360610139003000, 360610112021004]})
print(dfcensus)

非常感谢任何输入!

  • 逐行调用 API 是最简单的方法
  • API 使用简单,使用 requests 构建 URL 参数记录在 API
  • 只需将其分配回数据框中的新列
  • 这是 运行 在 jupyter 实验室环境中
import requests

url = "https://geo.fcc.gov/api/census/block/find"

df = pd.DataFrame({"lat": [40.760659, 40.768254, 40.761573],
                   "lon": [-73.980420, -73.988639, -73.972628],})
df.assign(
    block=df.apply(
        lambda r: requests.get(
            url, params={"latitude": r["lat"], "longitude": r["lon"], "format": "json"}
        ).json()["Block"]["FIPS"],
        axis=1,
    )
)
lat lon block
0 40.7607 -73.9804 360610131001003
1 40.7683 -73.9886 360610139003000
2 40.7616 -73.9726 360610112021004