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.
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