J'utilise python 3 et jupyter notebook. J'ai un cadre de données de pandas qui est structuré comme ceci:
location price
Apr 25 ASHEVILLE 15.0
Apr 25 ASHEVILLE 45.0
Apr 25 ASHEVILLE 50.0
Apr 25 ASHEVILLE 120.0
Apr 25 ASHEVILLE 300.0
<class 'pandas.core.frame.DataFrame'>
J'essaie simplement de créer une boîte à moustaches pour chaque emplacement afin de montrer la fourchette de prix entre les articles de chaque emplacement.
Quand j'ai couru le code suivant:
import matplotlib.pyplot as plt
import numpy as np
%matplotlib inline
plt.boxplot(postings)
plt.show()
Il a renvoyé TypeError: unhashable type: 'slice'
Je suppose que vous avez besoin d'une boîte à moustaches pour chaque emplacement du même graphique. J'ai modifié dataframe pour ajouter des exemples de données pour un autre emplacement qui ressemble à-
date location month price
0 25 ASHEVILLE Apr 15.0
1 25 ASHEVILLE Apr 45.0
2 25 ASHEVILLE Apr 50.0
3 25 ASHEVILLE Apr 120.0
4 25 ASHEVILLE Apr 300.0
5 25 NASHVILLE Apr 34.0
6 25 NASHVILLE Apr 55.0
7 25 NASHVILLE Apr 70.0
8 25 NASHVILLE Apr 105.0
9 25 NASHVILLE Apr 85.0
Maintenant, appelez simplement boxplot sur ce cadre et fournissez les paramètres column
et by
postings.boxplot(column='price', by='location')
Je suppose que "prix" est la colonne de données que vous voulez avoir boxplotted. Vous devez donc d'abord sélectionner cette colonne et ne fournir que cette colonne à plt.boxplot
.
u = u"""index,location,price
Apr 25,ASHEVILLE,15.0
Apr 25,ASHEVILLE,45.0
Apr 25,ASHEVILLE,50.0
Apr 25,ASHEVILLE,120.0
Apr 25,ASHEVILLE,300.0"""
import io
import pandas as pd
import matplotlib.pyplot as plt
data = io.StringIO(u)
df = pd.read_csv(data, sep=",", index_col=0)
plt.boxplot(df["price"])
plt.show()
À en juger par les données, vous voulez avoir une boîte à moustaches avec une seule boîte parmi les 5 valeurs de prix que vous avez. Vous devez transmettre les données réelles à partir desquelles vous voulez créer la boîte à moustaches.
plt.boxplot(postings["price"])
Découvrez les exemples ici .