Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

seaborn time series from pandas dataframe

I'm struggling with what seems to be a very easy problem: how to get seaborn to plot a time series line chart from a pandas dataframe. What am I doing wrong here?

import seaborn as sns
import pandas as pd
df=pd.DataFrame({"Date":["2015-03-03","2015-03-02","2015-03-01"],"Close":[1,3,2]})
df["Date"]=pd.to_datetime(df["Date"])#Not sure if seaborn can parse strings as dates
sns.tsplot(data=df,unit=None, time="Date", value="Close")

I get this traceback:

---------------------------------------------------------------------------
ValueError                                Traceback (most recent call last)
<ipython-input-306-20e252f661c2> in <module>()
      1 df=pd.DataFrame({"Date":["2015-03-03","2015-03-02","2015-03-01"],"Close":[1,3,2]})
      2 df["Date"]=pd.to_datetime(df["Date"])
----> 3 sns.tsplot(data=df,unit=None, time="Date", value="Close")

C:\Anaconda\lib\site-packages\seaborn\timeseries.pyc in tsplot(data, time, unit, condition, value, err_style, ci, interpolate, color, estimator, n_boot, err_palette, err_kws, legend, ax, **kwargs)
    275     for c, (cond, df_c) in enumerate(data.groupby(condition, sort=False)):
    276 
--> 277         df_c = df_c.pivot(unit, time, value)
    278         x = df_c.columns.values.astype(np.float)
    279 

C:\Anaconda\lib\site-packages\pandas\core\frame.pyc in pivot(self, index, columns, values)
   3507         """
   3508         from pandas.core.reshape import pivot
-> 3509         return pivot(self, index=index, columns=columns, values=values)
   3510 
   3511     def stack(self, level=-1, dropna=True):

C:\Anaconda\lib\site-packages\pandas\core\reshape.pyc in pivot(self, index, columns, values)
    324     else:
    325         indexed = Series(self[values].values,
--> 326                          index=MultiIndex.from_arrays([self[index],
    327                                                        self[columns]]))
    328         return indexed.unstack(columns)

C:\Anaconda\lib\site-packages\pandas\core\frame.pyc in __getitem__(self, key)
   1795             return self._getitem_multilevel(key)
   1796         else:
-> 1797             return self._getitem_column(key)
   1798 
   1799     def _getitem_column(self, key):

C:\Anaconda\lib\site-packages\pandas\core\frame.pyc in _getitem_column(self, key)
   1802         # get column
   1803         if self.columns.is_unique:
-> 1804             return self._get_item_cache(key)
   1805 
   1806         # duplicate columns & possible reduce dimensionaility

C:\Anaconda\lib\site-packages\pandas\core\generic.pyc in _get_item_cache(self, item)
   1082         res = cache.get(item)
   1083         if res is None:
-> 1084             values = self._data.get(item)
   1085             res = self._box_item_values(item, values)
   1086             cache[item] = res

C:\Anaconda\lib\site-packages\pandas\core\internals.pyc in get(self, item, fastpath)
   2858                         loc = indexer.item()
   2859                     else:
-> 2860                         raise ValueError("cannot label index with a null key")
   2861 
   2862             return self.iget(loc, fastpath=fastpath)

ValueError: cannot label index with a null key

Unfortunately, I haven't found any answers in the documentation.

like image 254
Alexis Eggermont Avatar asked Nov 01 '15 11:11

Alexis Eggermont


People also ask

Can seaborn use pandas DataFrame?

Seaborn provides an API on top of Matplotlib that offers sane choices for plot style and color defaults, defines simple high-level functions for common statistical plot types, and integrates with the functionality provided by Pandas DataFrame s.

Is matplotlib better than seaborn?

Seaborn is more comfortable in handling Pandas data frames. It uses basic sets of methods to provide beautiful graphics in python. Matplotlib works efficiently with data frames and arrays.It treats figures and axes as objects. It contains various stateful APIs for plotting.

What is Factorplot in seaborn?

Factor Plot is used to draw a different types of categorical plot . The default plot that is shown is a point plot, but we can plot other seaborn categorical plots by using of kind parameter, like box plots, violin plots, bar plots, or strip plots.


1 Answers

The tsplot of seaborn is not meant to plot a simple timeseries line plot, but to plot uncertainties, see:https://stanford.edu/~mwaskom/software/seaborn/generated/seaborn.tsplot.html.

For a line plot, you can simply do

df.set_index('Date').plot()
like image 108
joris Avatar answered Oct 09 '22 09:10

joris