6

我想通过纬度/经度提取某些国家(更具体地说是某些国家的省/州)的(免费)历史天气数据,我需要将结果作为 .csv 文件或 pandas 数据框。我尝试了 forecast.io / DarkSky ( https://zeevgilovitz.com/python-forecast.io/ ) 的包装器,但它限制为每天 1000 个请求。所以我想知道是否有任何免费的 API,返回熊猫数据框或 .csv 格式并且支持经度/经度请求?

这是我尝试过的(如果您每天只需要 1000 个请求,也可以使用)。

lat = 30
lng = 5
start_date = datetime.datetime(2016, 1, 1)
attributes = ["temperature", "humidity", "pressure", "windSpeed"]


def getWeatherData(lat, lng, start_date, attributes):

    times = []
    data = {}

    for attr in attributes:
        data[attr] = []

    for offset in range(1, 1000):
        forecast = forecastio.load_forecast(api_key, lat, lng, time=start_date+datetime.timedelta(offset), units="us")
        h = forecast.hourly()
        d = h.data

        for p in d:
            times.append(p.time)
            for attr in attributes:
                data[attr].append(p.d[attr])

    weather_data = pd.DataFrame(data, index=times)

    return weather_data
4

1 回答 1

1

https://openweathermap.org/price有一个带有一些免费计划的 API,如果您每天需要 < 1000 次调用可能就足够了

它不会返回 csv 或 DataFrame 格式的数据,但 pandas 可以处理它返回的 json 格式

例子:

import requests
import json
import pandas as pd

url = 'https://api.openweathermap.org/data/2.5/onecall?lat=33.44&lon=-94.04&exclude=hourly,minutely&appid=<api_key_hidden>'
data = requests.get(url).json()

df = pd.DataFrame.from_dict(data['daily'])
于 2022-01-06T16:10:47.683 回答