IndexError: ошибка одиночного позиционного индексатора при загрузке данных - PullRequest
0 голосов
/ 28 сентября 2019

Я запускаю код для загрузки данных и сохранения их на локальном диске.Тем не менее, я получаю вышеупомянутое сообщение об ошибке.Обратите внимание, что изначально я конвертировал дату в другом формате, и при сохранении я получаю это сообщение об ошибке.

Не могли бы вы помочь мне с этой ошибкой?

import quandl
import os
import pandas as pd
import datetime as dt
import glob

if __name__ == "__main__":

    # Creating bucket to store missing data file and also bucket for modified date.
    data_missing = []
    New_date = []

    # Defining a path to save CSV files after downloading and also deleting all csv file at one go.
    extension = 'csv'
    path = "F:/Tradepoint/MyMkt/"
    if not os.path.exists(path):
           os.mkdir(path)
    os.chdir(path)
    csv_count = [i for i in glob.glob('*.{}'.format(extension))]
    for i in range(len(csv_count)):
        os.remove(r"F:/Tradepoint/MyMkt/" + csv_count[i][0:])

    # Setting up quandl configuration, reading ticker list, setting up date for which data is going to get downloaded.
    quandl.ApiConfig.api_key = 
    end_date = dt.date.today()
    diff_year = dt.timedelta(days=3650)
    start_date = end_date - diff_year
    stock_list = pd.read_csv(r"F:\Abhay_New\Abhay\Python\Project\SHARADAR_SF1.csv")

    # Looping through quandl website to download data and renaming them as per requirement.
    for i in range(len(stock_list)):
        data = quandl.get_table('SHARADAR/SEP', date={'gte':start_date, 'lte':end_date}, ticker=stock_list.iloc[i])
        sort_by_date = data.sort_values('date')
        for i in range(len(sort_by_date['date'])):
            Date = dt.date.strftime(sort_by_date['date'][i],'%d-%m-%Y')
            New_date.append(Date)
        if len(data)>1:
            Date = pd.Series(New_date).rename('Date')
            OPEN = sort_by_date['open']
            HIGH = sort_by_date['high']
            LOW =  sort_by_date['low']
            CLOSE = sort_by_date['close']
            VOLUME = sort_by_date['volume']
            final_data = pd.concat([Date,OPEN,HIGH,LOW,CLOSE,VOLUME],axis=1)
            stk = stock_list.iloc[i][0]
            final_data.to_csv(str(path + stk + '.csv'), sep=',', index = False, header = False)
        else:
            data_missing.append(stock_list.iloc[i]) 
print(data_missing)

Traceback (последний вызов был последним):

Файл "", строка 45, в stk = stock_list.iloc [i] [0]

Файл "C: \ Users \ Abhay \ Anaconda3 \ lib \"site-packages \ pandas \ core \ indexing.py ", строка 1373, в __getitem__, возвращает self._getitem_axis (Maybe_callable, axis = axis)

Файл" C: \ Users \ Abhay \ Anaconda3 \ lib \ site- "packages \ pandas \ core \ indexing.py ", строка 1830, в _getitem_axis self._is_valid_integer (ключ, ось)

Файл" C: \ Users \ Abhay \ Anaconda3 \ lib \ site-packages \ pandas \ core "\ indexing.py ", строка 1713, в _is_valid_integer поднять IndexError (« одиночный позиционный индексатор выходит за пределы »)

IndexError: одиночный позиционный индексатор выходит за пределы

Спасибо, Абхай Додия

1 Ответ

0 голосов
/ 30 сентября 2019

Индекс обоих для циклов i.Это может привести к непреднамеренному поведению:

for i in range(2):
     for i in range(3,11):
         pass
     print(i)

дает

10
10

Таким образом, даже после выхода из второго цикла последнее значение из i сохраняется.Переименуйте переменную подсчета в этом цикле, и ваша проблема должна исчезнуть.В вашем случае у вас, вероятно, больше дат, чем акций, и, таким образом, вы видите сообщение об ошибке.

...