Проблемы с импортом полей Excel в Python через Pandas - ошибка индексации за пределами - PullRequest
1 голос
/ 24 октября 2019

Я не уверен, что случилось, но мой код сработал сегодня, но не так. У меня есть таблица проектов Excel, которую я хочу импортировать и помещать в списки. Однако я получаю сообщение об ошибке «IndexError: index 8 выходит за границы оси 0 с размером 8», и поиски в Google не решили эту проблему для меня. Любая помощь приветствуется. У меня есть следующие поля в моем листе Excel: id, funding_end, ключевые слова, pi, summaryurl, htmlabstract, abstract, project_num, title. Не уверен, что мне не хватает ...

import pandas as pd

dataset = pd.read_excel('new_ahrq_projects_current.xlsx',encoding="ISO-8859-1")
df = pd.DataFrame(dataset)
cols = [0,1,2,3,4,5,6,7,8]
df = df[df.columns[cols]]

tt = df['funding_end'] = df['funding_end'].astype(str)
tt = df.funding_end.tolist()
for t in tt:
   allenddates.append(t)

bb = df['keywords'] = df['keywords'].astype(str)
bb = df.keywords.tolist()
for b in bb:
   allkeywords.append(b)

uu = df['pi'] = df['pi'].astype(str)
uu = df.pi.tolist()
for u in uu:
   allpis.append(u)

vv = df['summaryurl'] = df['summaryurl'].astype(str)
vv = df.summaryurl.tolist()
for v in vv:
   allsummaryurls.append(v)

ww = df['htmlabstract'] = df['htmlabstract'].astype(str)
ww = df.htmlabstract.tolist()
for w in ww:
   allhtmlabstracts.append(w) 

xx = df['abstract'] = df['abstract'].astype(str)
xx = df.abstract.tolist()
for x in xx:
   allabstracts.append(x) 

yy = df['project_num'] = df['project_num'].astype(str)
yy = df.project_num.tolist()
for y in yy:
   allprojectnums.append(y)    

zz = df['title'] = df['title'].astype(str)
zz = df.title.tolist()

for z in zz:
   alltitles.append(z) 

Ответы [ 3 ]

9 голосов
/ 24 октября 2019

IndexError: индекс вне границ означает, что вы пытаетесь вставить или получить доступ к чему-то , выходящему за его пределы или диапазон.

Каждый раз, когда вызагрузите файл test.xlx, test.csv или test.xlsx, используя Panadas , например:

data_set = pd.read_excel('file_example_XLS_10.xls', encoding="ISO-8859-1")

Для всех было бы лучше найти длину столбцов DataFrame, который поможет вам двигаться вперед при работе с large Data_Sets . например,

import pandas as pd

data_set = pd.read_excel('file_example_XLS_10.xls', encoding="ISO-8859-1") 
data_frames = pd.DataFrame(data_set)

print("Length of Columns:", len(data_frames.columns))

, что даст вам точное количество столбцов таблицы Excel. Затем вы можете указать соответствующие фреймы данных:

Длина столбцов: 8

cols = [0, 1, 2, 3, 4, 5, 6, 7]

2 голосов
/ 24 октября 2019

"IndexError: index 8 выходит за границы оси 0 с размером 8"

cols = [0,1,2,3,4,5,6,7,8]

должно быть cols = [0,1,2,3,4,5,6,7].

Я думаю, что у вас есть8 столбцов, но ваш столбец имеет индекс 9 столбцов.

1 голос
/ 24 октября 2019

Я согласен с @Bill CX, что, похоже, вы пытаетесь получить доступ к несуществующему столбцу. Хотя я не могу воспроизвести вашу ошибку, у меня есть некоторые идеи, которые могут помочь вам двигаться вперед.

Сначала дважды проверьте форму вашего фрейма данных:

import pandas as pd

dataset = pd.read_excel('new_ahrq_projects_current.xlsx',encoding="ISO-8859-1")
df = pd.DataFrame(dataset)
print(df.shape) # print shape of data read in to python

Вывод должен быть

(X, 9) # "X" is the number of rows

Если фрейм данных имеет 8 столбцов, то df.shape будет (X, 8). Это может быть причиной того, что вы получаете ошибку.

Еще одна проверка для вас - распечатать первые несколько строк вашего фрейма данных.

print(df.head)

Это позволит вам еще раз проверить, правильно ли вы прочитали данные. Я не уверен, но возможно, что ваш .xlsx файл имеет 9 столбцов, но панды читают только 8 из них.

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