#python #excel #pandas
#python #excel #pandas
Вопрос:
У меня есть Excel с 17 листами, и я запускаю цикл для извлечения данных со всех листов, кроме первого. Все листы имеют идентичную структуру, но что-то не так происходит, когда мой i = 6, поскольку я получаю следующую ошибку:
---------------------------------------------------------------------------
IndexError Traceback (most recent call last)
<ipython-input-244-ea6f45e973a4> in <module>()
4 df_1 = pd.read_excel(r'C:Usersfilippo.sebastioOneDrive - ELEVATETargetTarget Download 28 FebQuantitative dataSCHAEFER_Putian ZhangShengzhangsheng -- RSAP Factory Metrics Tool- Hardcopy Form draft to publish 2018 12.xlsx', i , header = 4, index_col=1)
5 worksheet_1 = workbook.sheet_by_index(i)
----> 6 month = worksheet_1.cell(5,4).value
7 df_1 = df_1.drop(df_1.index[0])
8 df_1 = df_1.drop(df_1.index[-1])
~Anaconda3libsite-packagesxlrdsheet.py in cell(self, rowx, colx)
406 xfx = None
407 return Cell(
--> 408 self._cell_types[rowx][colx],
409 self._cell_values[rowx][colx],
410 xfx,
IndexError: array index out of range
Это мой цикл
frame = pd.DataFrame()
list_ = []
for i in range(1,17):
df_1 = pd.read_excel(r'C:Usersfilippo.sebastioOneDrive - ELEVATETargetTarget Download 28 FebQuantitative dataSCHAEFER_Putian ZhangShengzhangsheng -- RSAP Factory Metrics Tool- Hardcopy Form draft to publish 2018 12.xlsx', i , header = 4, index_col=1)
worksheet_1 = workbook.sheet_by_index(i)
month = worksheet_1.cell(5,4).value
df_1 = df_1.drop(df_1.index[0])
df_1 = df_1.drop(df_1.index[-1])
df_1 = df_1.drop(df_1.columns[0], axis=1)
df_1 = df_1.dropna(axis=1, how='all')
for col in df_1.columns[0:3]:
df_1[col] = pd.to_numeric(df_1[col], errors='coerce')
df_1['mean'] = df_1.iloc[:, 0:3].mean(axis=1)
df_1 = df_1[[ 'mean']]
df_1_t = df_1.T
df_1_t['Month'] = month
df_1_t['Factory'] = worksheet_1.cell(3,2).value
df_1_t['Factory_id'] = worksheet_0.cell(3,2 ).value
df_1_t['Country'] = worksheet_0.cell(4,2 ).value
df_1_t['Consultant'] = worksheet_0.cell(5,2 ).value
list_.append(df_1_t)
list_
frame = pd.concat(list_)
frame
Я проверил, и конкретная ячейка на листе не пуста (все листы одинаковы и заполнены аналогичным образом). Кроме того, цикл отлично работает на всех других листах — (с 1 по 5 и с 7 по 17). В чем может быть проблема?
Комментарии:
1. Есть ли скрытый лист? Можете ли вы попробовать показать скрытые листы и посмотреть, структурирован ли 6-й лист по-другому?
2. Я раскрыл лист, и появился раскрывающийся справочный лист. Я переместил справочный лист на последний лист, тем не менее, я повторно запускаю цикл, и у меня всегда одна и та же проблема.
3. Это все еще сбой при i = 6 или при i = 17?
4. всегда при i = 6
5. вы можете поместить код в цикл for при попытке / исключении, чтобы он выполнялся для всех допустимых листов и пропускал те, которые завершаются неудачей