Не работает функция при перечислении индексов датафрейма
Хочу создать функцию, в которую буду передавать несколько параметров, один из которых- перечисление индексов датафрейма.
import seaborn as sns
import matplotlib.pyplot as plt
import pandas as pd
from openpyxl import workbook
from openpyxl import load_workbook
df = pd.read_excel('Свод.xlsx', sheet_name='Результаты')
df_columns = pd.read_excel('Свод.xlsx', sheet_name='Результаты', usecols=df.iloc[:,97:129])
a = df['КАБИНЕТ']
df_columns.reindex = a
def opisatelnie(kabineti, sheetnames, name_of_histogram, path):
a = df_columns.loc[kabineti].describe(include = 'all')
for col in a.columns:
plt.figure(figsize=(8, 5))
N, bins, patches = plt.hist(df[col], edgecolor='yellow')
jet = plt.get_cmap('Greys', len(patches))
for i in range(len(patches)):
patches[i].set_facecolor(jet(i))
plt.title(name_of_histogram.format(str(col)))
plt.draw()
plt.savefig(path.format(
str(col)))
plt.close()
opisatelnie(['com', 'com1', 'com2-cd', 'c-2'], 'Вся сфера', "{}, Вся сфера.png", "C:/Users/Zed/Desktop/Work/Нормализация/ИТОГИ/Сфера вся/Вся сфера/{}, Все сферы.png" )
Но получаю ошибку:
KeyError: "None of [Index(['com', 'com1', 'com2-cd', 'c-2',\n dtype='object')] are in the [index]"
Были попытки исправить, но ничего не вышло; индексы точно содержатся в датафрейме. Помогите: в чем моя ошибка?
Пример входных данных:
П1 П2 П3 П4 П5 П6 П7
com 24 28 8 11 14 38 27
com2 30 17 24 21 21 29 29
com3 34 33 23 16 22 25 17
com1 22 15 20 16 26 27 19
com1 32 27 20 14 22 35 19
com 20 9 20 15 21 38 27
com2-cd 17 25 28 24 23 31 23
c-2 40 30 20 9 17 29 13
com 25 23 17 17 25 29 19
c-2 34 28 12 9 22 22 17
com 40 33 17 9 27 35 11
com 28 35 24 15 18 28 20
com2-cd 30 26 13 10 18 23 22
c-2 32 32 21 24 24 23 16
c-2 34 15 11 5 20 22 31
com2-cd 21 38 22 20 14 35 28
c-2 38 24 33 35 32 30 5
c-3 44 17 6 8 30 27 17
c-4 14 14 28 15 19 29 23
c-5 30 29 25 19 19 33 21
com2-cd 30 25 16 10 30 36 17
Ответы (2 шт):
Вижу как минимум такую ошибку:
df_columns.reindex = a
Конечно, Python позволяет всякое, в том числе присваивать что угодно функциям, в результате чего потом возникают загадочные ошибки, но правильно функцию reindex использовать так:
df_columns.reindex(a)
Можно и с помощью присваивания сделать переиндексацию (и обычно так и делают), но тогда надо использовать index, а не reindex:
df_columns.index = a
Скорее всего у вас не произошла переиндексация df из-за этой ошибки, а остальные ошибки уже следствие этого.
Я думаю — не зная ничего о вашем df_columns — что вместо вашего
a = df_columns.loc[kabineti].describe(include = 'all')
нужно писать
a = df.loc[kabineti].describe(include = 'all')
(Значит, df вместо df_columns.)