2014-11-26 10 views
10

Ich folge dem Tutorial an http://nbviewer.ipython.org/github/jvns/pandas-cookbook/blob/v0.1/cookbook/Chapter%205%20-%20Combining%20dataframes%20and%20scraping%20Canadian%20weather%20data.ipynbPlotten Datenrahmen hebt Fehler von Ordinalwertes muss> = 1

ich einen Pandas Datenrahmen

weather_mar2012['Temp (°C)']

Out[30]: 

Date/Time 
2012-03-01 00:00:00 -5.5 
2012-03-01 01:00:00 -5.7 
2012-03-01 02:00:00 -5.4 

Beim Versuch, es plotten ich ein Fehler

weather_mar2012['Temp (°C)'].plot(figsize=(15, 5)) 



--------------------------------------------------------------------------- 
ValueError        Traceback (most recent call last) <ipython-input-31-21c79ba7d5ef> in <module>() 
----> 1 weather_mar2012['Temp (°C)'].plot(figsize=(15, 5)) 

/home/vagrant/anaconda3/lib/python3.4/site-packages/pandas/tools/plotting.py in plot_series(data, kind, ax, figsize, use_index, title, grid, legend, style, logx, logy, loglog, xticks, yticks, xlim, ylim, rot, fontsize, colormap, table, yerr, xerr, label, secondary_y, **kwds) 2486     yerr=yerr, xerr=xerr, 2487     label=label, secondary_y=secondary_y, 
-> 2488     **kwds) 2489  2490 

/home/vagrant/anaconda3/lib/python3.4/site-packages/pandas/tools/plotting.py in _plot(data, x, y, subplots, ax, kind, **kwds) 2292   plot_obj = klass(data, subplots=subplots, ax=ax, kind=kind, **kwds) 2293 
-> 2294  plot_obj.generate() 2295  plot_obj.draw() 2296  return plot_obj.result 

/home/vagrant/anaconda3/lib/python3.4/site-packages/pandas/tools/plotting.py in generate(self) 
    922   self._make_legend() 
    923   self._post_plot_logic() 
--> 924   self._adorn_subplots() 
    925 
    926  def _args_adjust(self): 

/home/vagrant/anaconda3/lib/python3.4/site-packages/pandas/tools/plotting.py in _adorn_subplots(self) 1052      ax.set_xticklabels(xticklabels) 1053     self._apply_axis_properties(ax.xaxis, rot=self.rot, 
-> 1054           fontsize=self.fontsize) 1055    elif self.orientation == 'horizontal': 1056     if self._need_to_set_index: 

/home/vagrant/anaconda3/lib/python3.4/site-packages/pandas/tools/plotting.py in _apply_axis_properties(self, axis, rot, fontsize) 1061  1062 def _apply_axis_properties(self, axis, rot=None, fontsize=None): 
-> 1063   labels = axis.get_majorticklabels() + axis.get_minorticklabels() 1064   for label in labels: 1065    if rot is not None: 

/home/vagrant/anaconda3/lib/python3.4/site-packages/matplotlib/axis.py in get_majorticklabels(self) 1155  def get_majorticklabels(self): 1156   'Return a list of Text instances for the major ticklabels' 
-> 1157   ticks = self.get_major_ticks() 1158   labels1 = [tick.label1 for tick in ticks if tick.label1On] 1159   labels2 = [tick.label2 for tick in ticks if tick.label2On] 

/home/vagrant/anaconda3/lib/python3.4/site-packages/matplotlib/axis.py in get_major_ticks(self, numticks) 1284   'get the tick instances; grow as necessary' 1285   if numticks is None: 
-> 1286    numticks = len(self.get_major_locator()()) 1287   if len(self.majorTicks) < numticks: 1288    # update the new tick label properties from the old 

/home/vagrant/anaconda3/lib/python3.4/site-packages/matplotlib/dates.py in __call__(self) 
    863  def __call__(self): 
    864   'Return the locations of the ticks' 
--> 865   self.refresh() 
    866   return self._locator() 
    867 

/home/vagrant/anaconda3/lib/python3.4/site-packages/matplotlib/dates.py in refresh(self) 
    880  def refresh(self): 
    881   'Refresh internal information based on current limits.' 
--> 882   dmin, dmax = self.viewlim_to_dt() 
    883   self._locator = self.get_locator(dmin, dmax) 
    884 

/home/vagrant/anaconda3/lib/python3.4/site-packages/matplotlib/dates.py in viewlim_to_dt(self) 
    624  def viewlim_to_dt(self): 
    625   vmin, vmax = self.axis.get_view_interval() 
--> 626   return num2date(vmin, self.tz), num2date(vmax, self.tz) 
    627 
    628  def _get_unit(self): 

/home/vagrant/anaconda3/lib/python3.4/site-packages/matplotlib/dates.py in num2date(x, tz) 
    343   tz = _get_rc_timezone() 
    344  if not cbook.iterable(x): 
--> 345   return _from_ordinalf(x, tz) 
    346  else: 
    347   x = np.asarray(x) 

/home/vagrant/anaconda3/lib/python3.4/site-packages/matplotlib/dates.py in _from_ordinalf(x, tz) 
    223   tz = _get_rc_timezone() 
    224  ix = int(x) 
--> 225  dt = datetime.datetime.fromordinal(ix) 
    226  remainder = float(x) - ix 
    227  hour, remainder = divmod(24 * remainder, 1) 

ValueError: ordinal must be >= 1 

Was bedeutet das?

Wie kann ich das beheben?

+0

Es sieht aus als ob Sie einen Fehler wegen der Daten aus irgendeinem Grund erhalten. Es ist schwer zu sagen, ohne die Daten durchzusehen. Vielleicht könnten Sie versuchen, den Index zurückzusetzen, die Spalte mit 'pd.to_datetime 'auf den neuesten Stand zu bringen und ihn dann wieder als Index zu setzen? – DataSwede

+0

Es ist bereits eine Zeitreihe weather_mar2012.index [2012-03-01 00:00:00, ..., 2012-03-31 23:00:00] Länge: 744, Freq: None, Zeitzone: keine –

+0

Ich sehe das auch ... Ich bekomme es auch mit dem gleichen Datenframe nach dem Zurücksetzen und Löschen des Index, aber ich denke nicht, dass dies mit dem Index zu tun hat . – naught101

Antwort

0

Das war ein Fehler in Pandas: 0.18.1 und 0.19.2 fixiert, zB Lauf conda upgrade pandas

5

Ich war immer diesen Fehler in ipython auch mit aktuellen Pandas 0.20.3

es aufgespürt zu Ich habe vorher ein Skript ausgeführt, das eine Figur mit einem anderen Index speicherte, aber plt.show() nicht ausgeführt hatte, da die Figur gespeichert worden war und ich sie nicht sehen musste.

So, @ @ naught101 angedeutet, zwingt das Erzwingen plt.close('all') vor dem Anzeigen der nächsten Abbildung das Problem behoben. Wahrscheinlich am Ende der Skripts sowieso eine gute Übung.

+0

Danke, das hat für mich funktioniert! (auch mit ipython) – kristian

Verwandte Themen