Ошибка при отображении процентов при построении гистограммы в фреймах данных

#python #pandas #dataframe #matplotlib #seaborn

#python #pandas #фрейм данных #matplotlib #seaborn

Вопрос:

Я пытаюсь отобразить процентное соотношение каждого столбца и сталкиваюсь с ошибкой — IndexError: индекс 3 выходит за пределы оси 0 с размером 3

 import pandas as pd
import numpy as np 
import matplotlib.pyplot as plt
% matplotlib inline 
import seaborn as sns


df = pd.read_csv('https://github.com/Kevin-ck1/Intro-To-Data-Science/raw/master/hotel_bookings.csv')

df_booking = df.copy()

df_booking['percentage'] = round(df_booking['arrival_date_year']/df_booking['arrival_date_year'].sum() * 100, 1)

df_booking['arrival_date_year'].value_counts(dropna=True).plot(kind="bar")
xlocs, xlabs = plt.xticks()

for i, v in enumerate(df_booking['percentage']):

    plt.text(xlocs[i] - 0.08, v   25, str(v)   '%', fontsize = 15)

plt.title('Booking')
plt.show()

  

Выдается сообщение об ошибке

 IndexError                                Traceback (most recent call last)

<ipython-input-59-07b4659a45f8> in <module>()
     21 for i, v in enumerate(df_booking['percentage']):
     22 
---> 23     plt.text(xlocs[i] - 0.08, v   25, str(v)   '%', fontsize = 15)
     24 
     25 plt.title('Booking')

IndexError: index 3 is out of bounds for axis 0 with size 3
  

Комментарии:

1. Пожалуйста, отредактируйте свой пост и вставьте весь свой код

2. Все проценты в столбце равны 0. Кроме того, вы пытаетесь аннотировать 3 столбца значениями 119390 из столбца.

3. @TrentonMcKinney на выходе отображается ноль, но это не должно быть фактическим значением… Его должно быть 100, разделенное на три значения

Ответ №1:

Работая над вашим текущим кодом, имеет смысл сохранить подсчеты, затем вычислить процент, а затем добавить тики, используя проценты:

 counts = df['arrival_date_year'].value_counts(dropna=True)
perc = round(100*counts/counts.sum(),1).to_numpy()

counts.plot(kind="bar")

xlocs, xlabs = plt.xticks()

for i in range(len(da)):

    plt.text(xlocs[i] - 0.08, counts.iloc[i]   25, str(perc[i])   '%', fontsize = 10)

plt.title('Booking')
plt.show()
  

введите описание изображения здесь