Как исправить «IndexError: одиночный позиционный индексатор выходит за пределы» в python? - PullRequest
0 голосов
/ 20 октября 2019

Я пытаюсь работать с программой с графическим интерфейсом, которая проходит через файл Excel. Пользователь получает данные, записанные в файле Excel, и, если он нажимает «Принять», он должен направить эти данные в одну таблицу. Если нет - другой стол. Я пытался обойти это любым способом, который я могу найти в stackoverflow, но ни один из них, кажется, не решил мою проблему. Я хотел бы за любую помощь.

Я продолжаю сталкиваться с проблемой

Exception in Tkinter callback
Traceback (most recent call last):
  File "C:\Users\roniz\AppData\Local\Programs\Python\Python37\lib\tkinter\__init__.py", line 1705, in __call__
    return self.func(*args)
  File "C:/Users/roniz/PycharmProjects/emun/manual_validation.py", line 187, in accept_query
    self.accepted.append(self.df.iloc[self.num]['bizid'])
  File "C:\Users\roniz\AppData\Local\Programs\Python\Python37\lib\site-packages\pandas\core\indexing.py", line 1424, in __getitem__
    return self._getitem_axis(maybe_callable, axis=axis)
  File "C:\Users\roniz\AppData\Local\Programs\Python\Python37\lib\site-packages\pandas\core\indexing.py", line 2157, in _getitem_axis
    self._validate_integer(key, axis)
  File "C:\Users\roniz\AppData\Local\Programs\Python\Python37\lib\site-packages\pandas\core\indexing.py", line 2088, in _validate_integer
    raise IndexError("single positional indexer is out-of-bounds")
IndexError: single positional indexer is out-of-bounds

И если не эта, я получаю то же самое, просто написано по-другому.

Я пыталсяЧтобы передать данные в виде однострочного словаря, я попытался передать данные в разных местах кода.

import tkinter as Tkinter
import googlemaps
import pandas as pd
import requests


class Application(Tkinter.Frame):
    def __init__(self, master):
        Tkinter.Frame.__init__(self, master)
        self.parent = master
        frame = Tkinter.Frame(self)

        self.df = pd.read_excel('checkformanual.xlsx', sheet_name="Sheet1", header=0)
        self.num = 0
        self.gpi = self.df.iloc[self.num]['googleid']  # @todo: lo#

        self.accepted = []
        self.declined = []

        self.butt1 = Tkinter.Button(frame, text='Accept', command=self.accept_query)
        self.butt2 = Tkinter.Button(frame, text='Decline', command=self.decline_query)

        frame.pack(fill=Tkinter.BOTH, expand=1, side=Tkinter.BOTTOM)
        self.pack(fill=Tkinter.BOTH, expand=1)

    def accept_query(self):
        self.num += 1
        self.accepted.append(self.df.iloc[self.num]['bizid'])

    def decline_query(self):
        self.num += 1
        self.declined.append(self.df.iloc[self.num]['bizid'])

def main():
    root = Tkinter.Tk()
    app = Application(root)
    app.mainloop()

    accepteddf = app.df[app.df['bizid'].isin(app.accepted)]
    declineddf = app.df[app.df['bizid'].isin(app.declined)]

    accepteddf.to_excel("accepted.xlsx", index=False)
    declineddf.to_excel("declined.xlsx", index=False)

if __name__ == '__main__':
    main()

1 Ответ

0 голосов
/ 20 октября 2019

Кажется, проблема в этой функции:

def accept_query(self):
        self.num += 1
        self.accepted.append(self.df.iloc[self.num]['bizid'])

В частности, с iloc[self.num]. Эта операция вызовет исключение IndexError, если предоставленный целочисленный индекс (в данном случае self.num) выходит за пределы. Тот факт, что вы увеличиваете self.num перед добавлением к self.accepted, кажется подозрительным, но, возможно, это умышленно. В любом случае, трудно диагностировать проблему, не видя хотя бы скриншота файла Excel.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...