#python #pandas
#python #pandas
Вопрос:
У меня есть фолл. фрейм данных:
Month(s) Vals
0 Mar [3.691756, 3.59027575]
1 Mar - Apr [4.75706325, 3.138456625, 1.90741175, 3.019323]
2 Mar - May [4.698454875, 3.317812375, 2.512695375, 2.8096]
3 Mar - Jun [4.70111125, 3.474370375, 2.53445075, 2.926820]
4 Mar - Jul [4.79324375, 3.56983175, 2.39309125, 3.0682476]
5 Mar - Aug [4.618898125, 3.613308875, 2.361248375, 3.0536]
Я хочу создать boxplot с осью x, используя столбец «Месяц (ы)», а ось y — столбец «Vals». Простое выполнение df.plot()
не работает. Как мне это исправить?
Комментарии:
1. Вы ведь понимаете , что ваша
Vals
колонка — это аlist
, верно? Вам нужно будет либо разбить его на разные столбцы, а затем построить график, либо вам нужно будет свернуть список в некоторые статистические показатели (такие как среднее значение и дисперсия), которые вы можете построить. В вашем вопросе недостаточно информации, чтобы я мог понять, какой подход соответствует вашим потребностям. Кроме того, вашMonth(s)
столбец должен иметь единое значение, чтобы график имел смысл. Кроме того, заменитеMonth(s)
его на что-нибудь другое, потому что это имя напрашивается на неприятности.2. спасибо @Kartik, я хочу нарисовать прямоугольную диаграмму, поэтому не уверен, поможет ли вычисление статистической меры.
3. Хорошо, тогда объясню вам данные
Vals
… Прямоугольные графики используются для визуализации распределения данных, они похожи на нормальное распределение, как видно сверху. У них есть линия для среднего значения и границы прямоугольника, представляющие стандартное отклонение, а затем хвосты, представляющие доверительные интервалы, и точки за ними, показывающие выбросы. ВашVals
не соответствует ни одной из этих мер прямо сейчас.
Ответ №1:
Подготовка вашего фрейма данных путем установки «Месяца (ов)» в качестве индекса
df = pd.DataFrame([(' Mar',[3.691756, 3.59027575]),
('Mar - Apr', [4.75706325, 3.138456625, 1.90741175, 3.019323]),
('Mar - May',[4.698454875, 3.317812375, 2.512695375, 2.8096]),
('Mar - Jun', [4.70111125, 3.474370375, 2.53445075, 2.926820]),
('Mar - Jul', [4.79324375, 3.56983175, 2.39309125, 3.0682476]),
('Mar - Aug', [4.618898125, 3.613308875, 2.361248375, 3.0536])],
columns=['Month(s)','Vals']).set_index('Month(s)')
это позволит вам преобразовать каждую строку в серию
df['Vals'].apply(lambda x: pd.Series(x)).T.boxplot(figsize=(10,10),rot=45)