возникла проблема с добавлением данных из словаря в фрейм данных

#python #pandas #dataframe #openweathermap

Вопрос:

Столкнувшись с проблемой создания функции для хранения ответа в столбцах, например, для передачи названия города и получения в качестве ответа сведений о max_temp, min_temp, давлении. который я хочу сохранить в новой колонке.

 import pyowm
from pyowm.utils import config
from pyowm.utils import timestamps

api_key = {key from openweather(free)}
mgr = owm.weather_manager()
data =[]
def get_weather(city):
    observation = mgr.weather_at_place(city)
    l = observation.weather
    Wind_Speed = l.wind()['speed']
    Temp = l.temperature('celsius')['temp']
    Max_temp = l.temperature('celsius')['temp_max']
    Min_temp = l.temperature('celsius')['temp_min']
    #Heat_index = l.heat_index
    Humidity = l.humidity
    Pressure = l.pressure['press']
    weather = {"City": city,"Wind_Speed" : Wind_Speed, "Temp": 
    Temp,"Max_temp":Max_temp, "Min_temp":Min_temp, "Humidity":Humidity,
                  "Pressure":Pressure}
    
    return weather

for city in df2['City']:
    get_weather(city)
    df = df.append(data, True)
 

Хотите добавить каждую информацию о погоде в виде столбца на основе названия города

Хотите создать одну функцию, которая хранит все детали в столбцах, не хотите создавать отдельные функции.

Фрейм данных похож на:

введите описание изображения здесь

Ответ №1:

Вы можете вернуть словарь со своего сайта.

 def get_weather(city):
    observation = mgr.weather_at_place(city)
    l = observation.weather
    Wind_Speed = l.wind()['speed']
    Temp = l.temperature('celsius')['temp']
    Max_temp = l.temperature('celsius')['temp_max']
    resp=dict()
    resp['Wind_Speed ']=Wind_Speed 
    resp['Temp']=Temp 
    resp['Max_temp']=Max_temp  
    return resp

df["Wind_speed"] = df["city"].apply(lambda x: get_weather(x)['Wind_Speed'])
df["Temp"] = df["city"].apply(lambda x: get_weather(x)['Temp'])
df["Max_temp"] = df["city"].apply(lambda x: get_weather(x)['Max_temp'])
 

Комментарии:

1. Спасибо за повтор, но вопрос в том, как создать единую функцию, чтобы получить все детали, не хочу создавать отдельные функции, как описано выше. (вопрос обновлен)

2. df[[‘Скорость ветра’,’ максимальная температура’,’Давление’,’ минимальная температура’ ] ]= df[«город»].применить(лямбда x: get_weather(x)) . Ты хочешь чего-то подобного?

3. В этом случае для каждого столбца будет вызываться функция, поэтому это займет много времени. За один звонок получаю все подробности, поэтому хочу использовать способ, которым я могу хранить данные в df для всей строки.

4. Нет необходимости создавать функцию, есть ли способ, которым мы можем использовать только для поиска, чтобы получать и хранить данные в DF.

5. В этом случае вызовите функцию, использующую city , чтобы получить диктант ответа, создайте фрейм данных с одной строкой, добавьте значения из дикта в строку, добавьте его в родительский фрейм данных. Я считаю, что для этой цели не существует единого кода строки.