首页 > 解决方案 > 如何在meteostat的函数Point(lat=float,lon=float)中使用填充有浮点数的列?Python

问题描述

我正在尝试使用Daily ( Point (lat,lon), start-date, end-date)构建数据框, meteostat 库的一个函数返回Point(lat,lon)指示的位置的所有每日天气统计数据使用纬度和经度,从开始日期到结束日期。

问题是(lat, lon)参数需要是浮点数,因此只指示一个位置。我想添加几个位置并收集每个位置的每日气象数据。

import meteostat
from datetime import datetime
from meteostat import Point, Daily
import matplotlib.pyplot as plt
from meteostat import Stations
import pandas as pd
import numpy 

data = pd.read_csv(r'C:\Users\leoac\OneDrive\Desktop\Coding\Python apps\Correlation temp-goals in Serie A\seasons 09-19.csv', ";")
date_not_converted = data['Date']
date_being_converted = datetime.strptime(date_not_converted,'%d,%m,%Y')             #1bis non può essere una serie...allora provo a cambiare il tipo di dati
date = date_being_converted.strftime('%Y,%m,%d')

#plot = Daily(Point(data['lat'][15],data['lon'][15]),d1,d2).fetch()
data['temp']  = Daily(Point(data['lat'][1],data['lon'][1]),datetime(date),datetime(date)).fetch() #1 sistemare il formato data
print(data['temp'])                                                                               #2 trovare un modo per inserire i vettori date e lat/lon nel df
data['temp'].plot(y=['tavg'])
plt.show()

print(data)

标签: pythonweather

解决方案


这是受此github 问题启发的解决方案。它对不同的位置发出并行请求,然后将结果合并到 pandas 数据框中。

from datetime import datetime
from meteostat import Point, Daily
from multiprocessing import cpu_count

from joblib import Parallel, delayed
import pandas as pd

def get_bulk_data(row):
    location = Point(row.lat, row.lon)
    data = Daily(location, row.Date, row.Date).fetch()
    data["latitude"] = row.lat
    data["longitude"] = row.lon
    return data

if __name__ == "__main__":
    df = pd.read_csv("seasons.csv", sep=";")
    df["Date"] = pd.to_datetime(df["Date"], format="%d,%m,%Y")

    executor = Parallel(n_jobs=cpu_count(), backend='multiprocessing')
    tasks = (
        delayed(get_bulk_data)(row)
        for _, row in df.iterrows()
    )
    list_of_locations_data = executor(tasks)
    data_full = pd.concat(list_of_locations_data)
    print(data_full)

它适用于以下 csv 和日期格式,如果您的代码略有不同,您可以调整代码:

Date;lat;lon
18,02,1997;50.3;-4.7
12,07,1998;41.3;1.5

推荐阅读