【问题标题】:IndexError: single positional indexer is out-of-bounds error while downloading dataIndexError:单个位置索引器在下载数据时出现越界错误
【发布时间】:2019-09-28 10:46:44
【问题描述】:

我正在运行代码来下载数据并将它们保存在本地驱动器中。但是,我收到上述错误消息。请注意,最初我已将日期转换为不同的格式,在保存它们时我收到此错误消息。

你能帮我解决这个错误吗?

'''

进口quandl 导入操作系统 将熊猫导入为 pd 将日期时间导入为 dt 导入全局

如果 name == "ma​​in":

'Creating bucket to store missing data file.'
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 = [forma for forma in glob.glob('*.{}'.format(extension))]
for csv_coun in range(len(csv_count)):
    os.remove(r"F:/Tradepoint/MyMkt/" + csv_count[csv_coun][0:])

'Setting up quandl configuration, reading ticker list, setting up date for which data is going to get downloaded'
quandl.ApiConfig.api_key = 'Hba3CzgNnEa2LMxR14FA'
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 stock_lis in range(len(stock_list)):
    data = quandl.get_table('SHARADAR/SEP', date={'gte':start_date, 'lte':end_date}, ticker=stock_list.iloc[stock_lis])
    sort_by_date = data.sort_values('date')
    for sort_by_dat in range(len(sort_by_date['date'])):
        Date = dt.date.strftime(sort_by_date['date'][sort_by_dat],'%d-%m-%Y')
        New_date.append(Date)
    if len(data)>1:
        Date = pd.Series(New_date).rename('Date').astype(str)
        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[sort_by_dat][0]
        final_data.to_csv(str(path + stk + '.csv'), sep=',', index = False, header = False)
    else:
        data_missing.append(stock_list.iloc[sort_by_dat]) 

打印(data_missing)

'''

谢谢, 阿拜·多迪亚

【问题讨论】:

  • 能否包含错误的完整堆栈跟踪?
  • @user2314737 跟踪添加到上述问题。你能调查一下吗。谢谢
  • 您能展示来自stock_list 的样本吗?当您删除这里几乎所有的东西时,您能重现错误吗?我的意思是for i in range(stock_list): stock_list.iloc[0][1] 应该已经失败了。而不是整个 for 循环。
  • @Quickbeam2k1 在 stock_list 目前我只有一个选项“A”,即股票名称。我想先尝试一个股票代码,所以我就这样做了。但是,我仍然收到一条错误消息。你能帮我解决这个问题吗?
  • 再次,请显示一些数据。此外,您在访问.iloc 期间使用了某种链式索引。我认为这可能没有做你认为它应该做的事情。但同样,需要数据来验证

标签: python pandas dataframe python-datetime quandl


【解决方案1】:

两个for循环的索引都是i。这会导致潜在的意外行为:

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

给予

10
10

所以即使在退出第二个循环之后,i 的最后一个值仍然存在。重命名该循环中的计数变量,您的问题应该消失了。 在您的情况下,您的日期可能比股票多,因此请注意您的错误消息。

【讨论】:

  • 我尝试重命名它,但仍然给我同样的错误信息。请看上面修改后的代码。
  • 堆栈跟踪丢失。请添加它。另外请提供数据。在这种情况下,我们所能做的就是猜测
猜你喜欢
  • 2020-08-18
  • 2020-02-22
  • 1970-01-01
  • 2018-02-10
  • 2023-03-30
  • 2018-03-03
  • 1970-01-01
  • 1970-01-01
  • 2017-10-09
相关资源
最近更新 更多