HDFStore.append (Zeichenfolge, DataFrame) schlägt fehl, wenn der Inhalt der Zeichenfolgenspalte länger als der bereits vorhandene Inhalt ist

Ich habe einen Pandas DataFrame über einen HDFStore gespeichert, in dem im Wesentlichen Zusammenfassungszeilen zu den von mir ausgeführten Testläufen gespeichert sind.

Mehrere der Felder in jeder Zeile enthalten beschreibende Zeichenfolgen variabler Länge.

Wenn ich einen Testlauf durchführe, erstelle ich einen neuen DataFrame mit einer einzelnen Zeile:

def export_as_df(self):
    return pd.DataFrame(data=[self._to_dict()], index=[datetime.datetime.now()])

Und dann anrufenHDFStore.append(string, DataFrame) um die neue Zeile zum vorhandenen DataFrame hinzuzufügen.

Dies funktioniert einwandfrei, abgesehen davon, dass einer der Inhalte der Zeichenfolgenspalten größer ist als die längste bereits vorhandene Instanz. Daraufhin erhalte ich den folgenden Fehler:

File "<ipython-input-302-a33c7955df4a>", line 516, in save_pytables
store.append('tests', test.export_as_df())
File "/Library/Frameworks/EPD64.framework/Versions/7.3/lib/python2.7/site-packages/pandas/io/pytables.py", line 532, in append
self._write_to_group(key, value, table=True, append=True, **kwargs)
File "/Library/Frameworks/EPD64.framework/Versions/7.3/lib/python2.7/site-packages/pandas/io/pytables.py", line 788, in _write_to_group
s.write(obj = value, append=append, complib=complib, **kwargs)
File "/Library/Frameworks/EPD64.framework/Versions/7.3/lib/python2.7/site-packages/pandas/io/pytables.py", line 2491, in write
min_itemsize=min_itemsize, **kwargs)
File "/Library/Frameworks/EPD64.framework/Versions/7.3/lib/python2.7/site-packages/pandas/io/pytables.py", line 2254, in create_axes
raise Exception("cannot find the correct atom type -> [dtype->%s,items->%s] %s" % (b.dtype.name, b.items, str(detail)))
Exception: cannot find the correct atom type -> [dtype->object,items->Index([bp, id, inst, per, sp, st, title], dtype=object)] [values_block_3] column has a min_itemsize of [51] but itemsize [46] is required!

Ich kann keine Dokumentation zum Angeben der Zeichenfolgenlänge beim Erstellen eines DataFrames finden. Was ist die Lösung hier?

Aktualisieren:

Code, der fehlschlägt:

        store = pd.HDFStore(pytables_store)            
        for test in self.backtests:
            try:
                min_itemsizes = { 'buy_pattern' : 60, 'sell_pattern': 60, 'strategy': 60, 'title': 60 }
                store.append('tests', test.export_as_df(), min_itemsize = min_itemsizes)

Hier ist der Fehler unter 0.11rc1:

File "<ipython-input-110-492b7b6603d7>", line 522, in save_pytables
  store.append('tests', test.export_as_df(), min_itemsize = min_itemsizes)
File "/Users/admin/dev/pandas/pandas-0.11.0rc1/pandas/io/pytables.py", line 610, in append
  self._write_to_group(key, value, table=True, append=True, **kwargs)
File "/Users/admin/dev/pandas/pandas-0.11.0rc1/pandas/io/pytables.py", line 871, in _write_to_group
  s.write(obj = value, append=append, complib=complib, **kwargs)
File "/Users/admin/dev/pandas/pandas-0.11.0rc1/pandas/io/pytables.py", line 2707, in write
  min_itemsize=min_itemsize, **kwargs)
File "/Users/admin/dev/pandas/pandas-0.11.0rc1/pandas/io/pytables.py", line 2447, in create_axes
  self.validate_min_itemsize(min_itemsize)
File "/Users/admin/dev/pandas/pandas-0.11.0rc1/pandas/io/pytables.py", line 2184, in validate_min_itemsize
  raise ValueError("min_itemsize has [%s] which is not an axis or data_column" % k)
ValueError: min_itemsize has [buy_pattern] which is not an axis or data_column

Datenprobe:

                           all_day              buy_pattern  \
2013-04-14 12:11:44.377695   False  Hammer() and LowerLow()   

                                                           id instrument  \
2013-04-14 12:11:44.377695  tafdcc96ba4eb11e2a86d14109fcecd49     EURUSD   

                            open_margin periodicity sell_pattern strategy  \
2013-04-14 12:11:44.377695       0.0001     1:00:00                 Tsl()   

                           title  top_bottom  wick_body  
2013-04-14 12:11:44.377695   tsl         0.5          2 

dtypes:

print prob_test.export_as_df().get_dtype_counts() 

    bool       1
    float64    2
    int64      1
    object     7
    dtype: int64

Ich lösche die h5-Datei jedes Mal, wenn ich saubere Ergebnisse erzielen möchte. Sie fragen sich, ob etwas so albern ist, wie es fehlschlägt, weil das df zum Zeitpunkt des ersten Anhangs im h5 nicht vorhanden ist (und daher auch keine Spalten)?

Antworten auf die Frage(1)

Ihre Antwort auf die Frage