title: Turn Pandas DataFrame of strings into histogram
body: <p>Suppose I have a DataFrame of created like this:</p>
  
  <pre><code>import pandas as pd
  s1 = pd.Series(['a', 'b', 'a', 'c', 'a', 'b'])
  s2 = pd.Series(['a', 'f', 'a', 'd', 'a', 'f', 'f'])
  d = pd.DataFrame({'s1': s1, 's2', s2})
  </code></pre>
  
  <p>There is quite a lot of sparsity in the strings in the real data. I would like to create histograms of the occurrence of strings that looks like what is generated by d.hist() (eg. with subplots) for s1 and s2 (one per subplot).</p>
  
  <p>Just doing d.hist() gives this error:</p>
  
  <pre><code>/Library/Python/2.7/site-packages/pandas/tools/plotting.pyc in hist_frame(data, column, by, grid, xlabelsize, xrot, ylabelsize, yrot, ax, sharex, sharey, **kwds)
     1725         ax.xaxis.set_visible(True)
     1726         ax.yaxis.set_visible(True)
  -&gt; 1727         ax.hist(data[col].dropna().values, **kwds)
     1728         ax.set_title(col)
     1729         ax.grid(grid)
  
  /Library/Python/2.7/site-packages/matplotlib/axes.pyc in hist(self, x, bins, range, normed, weights, cumulative, bottom, histtype, align, orientation, rwidth, log, color, label, stacked, **kwargs)
     8099             # this will automatically overwrite bins,
     8100             # so that each histogram uses the same bins
  -&gt; 8101             m, bins = np.histogram(x[i], bins, weights=w[i], **hist_kwargs)
     8102             if mlast is None:
     8103                 mlast = np.zeros(len(bins)-1, m.dtype)
  
  /System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/numpy/lib/function_base.pyc in histogram(a, bins, range, normed, weights, density)
      167             else:
      168                 range = (a.min(), a.max())
  --&gt; 169         mn, mx = [mi+0.0 for mi in range]
      170         if mn == mx:
      171             mn -= 0.5
  
  TypeError: cannot concatenate 'str' and 'float' objects
  </code></pre>
  
  <p>I suppose I could manually go through each series, do a <code>value_counts()</code>, then plot it as a bar plot, and manually create the subplots. I wanted to check if there is a simpler way.</p>