J'obtiens l'erreur suivante pendant que j'essaie de tracer un pandas dataframe
:
ValueError: num doit être 1 <= num <= 0, pas 1
Code:
import matplotlib.pyplot as plt
names = ['buying', 'maint', 'doors', 'persons', 'lug_boot', 'safety']
custom = pd.DataFrame(x_train) //only a portion of the csv
custom.columns = names
custom.hist()
plt.show()
J'ai essayé de relire le fichier à partir du csv
et j'obtiens exactement la même erreur.
Éditer:
print x_train
production:
[[0,0 0,0 0,0 0,0 0,0 0,0]
[1,0 1,0 0,0 0,0 0,0 0,0]
[0,0 0,0 0,0 0,0 0,0 0,0]
...,
[0,0 0,0 0,0 0,0 0,0 0,0]
[0,33333333333333333 0,33333333333333333 2,0 2,0 2,0 2,0]
[0,0 0,0 3,0 3,0 3,0 3,0]]
Edit2:
Liste complète des erreurs (Traceback):
Traceback (dernier appel le plus récent):
Fichier "temp.py", ligne 104, dans custom.dropna (). Hist ()
Fichier "/home/kostas/anaconda2/lib/python2.7/site-packages/pandas/tools/plotting.py", ligne 2893, dans hist_frame layout = layout)
Fichier "/home/kostas/anaconda2/lib/python2.7/site-packages/pandas/tools/plotting.py", ligne 3380, dans _subplots ax0 = fig.add_subplot (nrows, ncols, 1, ** subplot_kw)
Fichier "/home/kostas/anaconda2/lib/python2.7/site-packages/matplotlib/figure.py", ligne 1005, dans add_subplot a = subplot_class_factory (projection_class) (self, * args, ** kwargs)
Fichier "/home/kostas/anaconda2/lib/python2.7/site-packages/matplotlib/axes/_subplots.py", ligne 64, en init maxn = lignes * cols, num = num) )
Je suis donc presque sûr que votre problème est lié au format du tableau train_x. J'ai essayé votre programme avec un tableau de 10 000 lignes et 6 colonnes et cela a bien fonctionné, donc le problème n'est pas la taille. Pour une raison quelconque, l'un des len(x_train)
ou len(x_train[0])
est 0. Ce qui me fait penser que c'est ainsi:
L'erreur ValueError que vous obtenez provient du module matplotlib.axes._subplot qui traite du dessin de nombreux petits sous-tracés dans un grand tracé (donc chaque petit histogramme). Le code du module est le suivant:
"""
*rows*, *cols*, *num* are arguments where
the array of subplots in the figure has dimensions *rows*,
*cols*, and where *num* is the number of the subplot
being created. *num* starts at 1 in the upper left
corner and increases to the right.
"""
rows, cols, num = args
rows = int(rows)
cols = int(cols)
if isinstance(num, Tuple) and len(num) == 2:
num = [int(n) for n in num]
self._subplotspec = GridSpec(rows, cols)[num[0] - 1:num[1]]
else:
if num < 1 or num > rows*cols:
raise ValueError(
"num must be 1 <= num <= {maxn}, not {num}".format(
maxn=rows*cols, num=num))
Votre problème est dans cette partie (voir l'explication dans les commentaires dans le code):
if num < 1 or num > rows*cols:
# maxN is the number of rows*cols and since this is showing 0 for you (in your error stacktrace),
# it means the number of cols being passed into your histogram is 0. Don't know why though :P
raise ValueError(
"num must be 1 <= num <= {maxn}, not {num}".format(
maxn=rows*cols, num=num))
Je ne sais pas comment vous lisez votre format d'entrée, mais je suis sûr que le problème y est lié. Si vous définissez x_train sur cela, cela fonctionne très bien:
x_train = [[0.0, 0.0, 0.0, 0.0, 0.0, 0.0],
[1.0, 1.0, 0.0, 0.0, 0.0, 0.0],
[0.0, 0.0, 0.0, 0.0, 0.0, 0.0],
[0.0, 0.0, 0.0, 0.0, 0.0, 0.0],
[0.3333333333333333, 0.3333333333333333, 2.0, 2.0, 2.0, 2.0],
[0.0, 0.0, 3.0, 3.0, 3.0, 3.0]]
Essayez de faire cela avant d'appeler le code dans votre question et voyez si cela fonctionne:
x_train = list([list(x) for x in x_train])
J'ai eu le même problème et j'ai trouvé que cela était dû au fait que le tableau NumPy était un tableau d'objets plutôt qu'un tableau flottant.
Essaye ça:
x_train = x_train.astype(np.float)