Ошибка TypeEr: индексы списка должны быть целыми числами или частями, а не str при извлечении данных из API - PullRequest
0 голосов
/ 28 апреля 2019

Попытка использовать алгоритм машинного обучения для прогнозирования погоды с использованием API openweathermap для массовой истории. Я использовал https://stackabuse.com/using-machine-learning-to-predict-the-weather-part-1/ в качестве основного ресурса для этого. Однако он продолжает давать мне ошибку типа, указанную в заголовке специально для строки 27: температура = данные ['main'] ['temp'] ,

from datetime import datetime
from datetime import timedelta
import time
from collections import namedtuple
import pandas as pd
import requests
import matplotlib.pyplot as plt

#Data collection and Organization
url = 'http://history.openweathermap.org//storage/d12a3df743e650ba4035d2c6d42fb68f.json'

target_date = datetime(2018, 4, 22)
features = ["date", "temperature", "pressure", "humidity", "maxtemperature", "mintemperature"]
DailySummary = namedtuple("DailySummary", features)


def extract_weather_data(url, target_date, days):
    records = []
    for _ in range(days):
        response = requests.get(url)
        if response.status_code == 200:
            data = response.json()
            records.append(DailySummary(
                date = target_date,
                temperature = data['main']['temp'],
                pressure = data['main']['pressure'],
                humidity = data['main']['humidity'],
                maxtemperature = data['main']['temp_max'],
                mintemperature = data['main']['temp_min']))
            time.sleep(6)
            target_date += timedelta(days =1)
    return records

records = extract_weather_data(url, target_date, 365)
#Finished data collection now begin to clean and process data using Pandas
df = pd.DataFrame(records, columns=features).set_index('date')
tmp = df[['temperature','pressure','humidty', 'maxtemperature', 'mintemperature']].head(10)

def derive_nth_day_feature(df, feature, N):
        rows = df.shape[0]
        nth_prior_measurements = [None]*N + [df[feature][i-N] for i in range(N, rows)]
        col_name = "{}_{}".format(feature, N)
        df[col_name]= nth_prior_measurements
for feature in features:
    if feature != 'date':
        for N in range (1, 4):
            derive_nth_day_feature(df, feature, N)

df.columns

1 Ответ

0 голосов
/ 28 апреля 2019

Ответ, который вы получите, представляет собой список словарей.Таким образом, вы должны выполнить итерации по списку, а затем извлечь временные значения из каждого элемента

response = requests.get(url)
data = response.json()
for d in data:
    print(d['main']['temp'])
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...