Петля Панд и Ошибка добавления - PullRequest
0 голосов
/ 05 октября 2018

Итак, я пытаюсь отправить массив данных VIN в API с открытым исходным кодом nhtsa и получить информацию обратно.Ниже работает с заменой df['vin'] на фактический VIN.Однако при добавлении цикла в мою функцию и попытке добавить результат приводит к тому, что я возвращаю пустой кадр данных вместо информации для 12 или около того VIN.Что я делаю не так?

Код ниже:

import pandas as pd
import requests
    #develop the data
z = pd.DataFrame(columns = ["vin"], data = ['LHJLC79U58B001633','SZC84294845693987','LFGTCKPA665700387','L8YTCKPV49Y010001',
                                                 'LJ4TCBPV27Y010217','LFGTCKPM481006270','LFGTCKPM581004253','LTBPN8J00DC003107',
                                                 '1A9LPEER3FC596536','1A9LREAR5FC596814','1A9LKEER2GC596611','1A9L0EAH9C596099',
                                                 '22A000018'])

z['manufacturer'] = ['A','A','A','A','B','B','B','B','B','C','C','D','D']



def nhtsa(df):
    '''
    sends VIN to NHTSA for data call
    '''
    for i in df:
        url = 'https://vpic.nhtsa.dot.gov/api/vehicles/DecodeVINValuesBatch/'
        post_fields = {'format': 'json', 'data': df['vin']};
        r = requests.post(url, data=post_fields);
        x = r.json()
        f = pd.DataFrame(x['Results'])
        g = f[['VIN','Make','Manufacturer','ManufacturerId','ManufacturerType', 'Model','ModelYear', 'ABS','VehicleType', 'BodyClass','DisplacementCC','ErrorCode', 'SuggestedVIN']]
        csv = pd.DataFrame()
        csv = csv.append(g, ignore_index = True)
        return csv

nhtsa(z)

1 Ответ

0 голосов
/ 08 октября 2018

Хорошо.Итак, благодаря @ G.Anderson, я понял это.Во-первых, пустой фрейм данных должен находиться вне цикла.Далее, я, как заявил Г. Андерсон, не был вызван.Я использовал оператор .loc для вызова того, что есть i.Ниже приведен код.

def nhtsa(df):
    '''
    sends VIN to NHTSA for data call
    '''
    df1 = pd.DataFrame()
    for i in current_trial.index:
        vin = df.loc[i, 'VIN']
        url = 'https://vpic.nhtsa.dot.gov/api/vehicles/DecodeVINValuesBatch/'
        post_fields = {'format': 'json', 'data': vin};
        r = requests.post(url, data=post_fields);
        x = r.json()
        f = pd.DataFrame(x['Results'])
        g = f[['VIN','Make','Manufacturer','ManufacturerId','ManufacturerType', 'Model','ModelYear', 'ABS','VehicleType', 'BodyClass','DisplacementCC','ErrorCode', 'SuggestedVIN']]
        df1 = df1.append(g)
    return df1  
...