Boxplot для разной длины последовательных значений из фрейма данных pandas

#python #pandas #numpy #matplotlib #boxplot

#python #pandas #numpy #matplotlib #boxplot

Вопрос:

У меня есть CSV-файл, подобный приведенному ниже :введите описание изображения здесь

С разной длиной значений для каждого столбца. Пытаюсь отобразить как boxplot.

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

код:

 import pandas as pd
data = pd.DataFrame()

df = pd.read_csv('/content/filename.csv', sep=';')
plt.figure(figsize=(12,8))

plt.plot()
plt.boxplot([df.dc_class0,df.dc_class1, df.dc_class3, df.dc_class2, df.dc_class4,            df.dc_class5, df.dc_class6, df.dc_class7, df.dc_class8, df.dc_class9, df.dc_class10,   df.dc_class11], 
        labels=['M0 ' str(round(df.dc_class0.mean(),1)),
                'M1 ' str(round(df.dc_class1.mean(),2)),
                'M2 ' str(round(df.dc_class2.mean(),3)), 
                'M3 ' str(round(df.dc_class3.mean(),4)), 
                'M4 '  str(round(df.dc_class4.mean(),3)),
                'M5 '  str(round(df.dc_class5.mean(),3)),
                'M6 '  str(round(df.dc_class6.mean(),3)),
                'M7 '  str(round(df.dc_class7.mean(),3)),
                'M8 '  str(round(df.dc_class8.mean(),3)),
                'M9 '  str(round(df.dc_class9.mean(),3)),
                'M10 '  str(round(df.dc_class10.mean(),3)),
                'M11 '  str(round(df.dc_class11.mean(),3)),

                ])

plt.ylim(0, 1)
plt.title('Dices des différentes classes')
plt.legend()
plt.show()
  

Я не получил графики для столбцов 5,6,7 и 8, idk, в чем проблема, есть ли какой-либо другой способ сделать это?

Ответ №1:

Есть недостающие данные в df.dc_class5 , df.dc_class6 , df.dc_class7 , df.dc_class8 , которые до сих пор остановить коробчатой диаграммы с указанием на эти колонны. Вы можете использовать .dropna() метод для каждого из столбцов с NaN при вызове plt.boxplot .

Также я думаю, что вы случайно переключили df.dc_class2 и df.dc_class3.

 plt.boxplot([
    df.dc_class0, df.dc_class1, df.dc_class2, 
    df.dc_class3, df.dc_class4, 
    df.dc_class5.dropna(), df.dc_class6.dropna(),
    df.dc_class7.dropna(), df.dc_class8.dropna(), 
    df.dc_class9, df.dc_class10, df.dc_class11
    ], 
        labels=[
            'M0 ' str(round(df.dc_class0.mean(),1)),
            'M1 ' str(round(df.dc_class1.mean(),2)),
            'M2 ' str(round(df.dc_class2.mean(),3)), 
            'M3 ' str(round(df.dc_class3.mean(),4)), 
            'M4 '  str(round(df.dc_class4.mean(),3)),
            'M5 '  str(round(df.dc_class5.mean(),3)),
            'M6 '  str(round(df.dc_class6.mean(),3)),
            'M7 '  str(round(df.dc_class7.mean(),3)),
            'M8 '  str(round(df.dc_class8.mean(),3)),
            'M9 '  str(round(df.dc_class9.mean(),3)),
            'M10 '  str(round(df.dc_class10.mean(),3)),
            'M11 '  str(round(df.dc_class11.mean(),3)),

        ]
    )