title: Storing pandas DataFrame with mixed data and category into hdf5
body: <p>I want to store a dataFrame with different columns into an hdf5 file (find an excerpt with data types below). </p>
  
  <pre><code>In  [1]: mydf
  Out [1]:
  endTime             uint32
  distance           float16
  signature         category
  anchorName        category
  stationList         object
  </code></pre>
  
  <p>Before converting some columns (signature and anchorName in my excerpt above), I used code like following to store it (which works pretty fine):</p>
  
  <pre><code>path = 'tmp4.hdf5'
  key = 'journeys'
  mydf.to_hdf(path, key, mode='w', complevel=9, complib='bzip2')
  </code></pre>
  
  <p>But it does not work with category and then I tried following:</p>
  
  <pre><code>path = 'tmp4.hdf5'
  key = 'journeys'
  mydf.to_hdf(path, key, mode='w', format='t', complevel=9, complib='bzip2')
  </code></pre>
  
  <p>It works fine, if I remove the column stationList, where each entry is a list of strings. But with this column I got the following exception:</p>
  
  <pre><code>Cannot serialize the column [stationList] because
  its data contents are [mixed] object dtype
  </code></pre>
  
  <p>How do I need to improve my code to get the data frame stored?</p>
  
  <p>pandas version: 0.17.1<br>
  python version: 2.7.6 (cannot change it due to compability reasons)</p>
  
  <hr>
  
  <p>edit1 (some sample code):</p>
  
  <pre><code>import pandas as pd
  
  mydf = pd.DataFrame({'endTime' : pd.Series([1443525810,1443540836,1443609470]),
                      'distance' : pd.Series([454.75,477.25,242.12]),
                      'signature' : pd.Series(['ab','cd','ab']),
                      'anchorName' : pd.Series(['tec','ing','pol']),
                      'stationList' : pd.Series([['t1','t2','t3'],['4','t2','t3'],['t3','t2','t4']])
                      })
  
  # this works fine (no category)
  mydf.to_hdf('tmp_without_cat.hdf5', 'journeys', mode='w', complevel=9, complib='bzip2')
  
  for col in ['anchorName', 'signature']:
      mydf[col] = mydf[col].astype('category')
  
  # this crashes now because of category data
  # mydf.to_hdf('tmp_with_cat.hdf5', 'journeys', mode='w', complevel=9, complib='bzip2')
  
  # switching to format='t'   
  # this caused problems because of "mixed data" in column stationList
  mydf.to_hdf('tmp_with_cat.hdf5', 'journeys', mode='w', format='t', complevel=9, complib='bzip2')
  
  mydf.pop('stationList')
  
  # this again works fine
  mydf.to_hdf('tmp_with_cat_without_stationList.hdf5', 'journeys', mode='w', format='t', complevel=9, complib='bzip2')
  </code></pre>
  
  <hr>
  
  <p>edit2:
  In the meanwhile I tried different things to get rid of this problem. One of these were to convert the entries of column stationList to tupels (possible since they shall not be changed) and to also convert it to category. But it did not change anything.
  Here are the lines I added after the conversion loop (just for completeness):</p>
  
  <pre><code>mydf.stationList = [tuple(x) for x in mydf.stationList.values]
  mydf.stationList.astype('category')
  </code></pre>