Ich bin der Autor von Saddle (sattel.github.io), der eine ähnliche Funktionalität wie Pandas bietet (aber in Scala auf der JVM). Ich versuche sicherzustellen, dass das HDF5-Serialisierungsformat von Pandas DataFrame mit dem von Saddle interoperabel ist. Zurzeit implementiere ich die String-Array-Serialisierung in Saddle. Also meine Frage ist, wie der Pandas DataFrame Strings serialisiert. Wenn ich eine HDF5-Datei in Pandas wie folgt erstellen:
%Vor%Und h5dump die resultierende tmp.h5-Datei, sehe ich, dass der String-Block (block2_values) als Datentyp H5T_VLEN und Attribut
gespeichert ist %Vor%Dies deutet auf einen ASCII-Zeichensatz hin; Die Bytes, die ich sehe, scheinen jedoch nicht ASCII zu entsprechen (dh "a", "b", "c"). Außerdem bin ich gespannt, woher STRSIZE 8 kommt. Kann jemand die Implementierungsdetails der String-Serialisierung, die über Pandas - & gt; pytables - & gt; hdf5? (Ich wäre auch glücklich mit irgendwelchen Zeigern in Pandas / pytables zu kodieren, wo ich anfangen kann, mich selbst tiefer zu graben :)
Sie haben ein Beispiel gewählt, das auf der Oberfläche sehr einfach erscheint, aber hinter den Kulissen ziemlich kompliziert ist. Dies endet mit dem Speichern von 3 verschiedenen Datenblöcken (1 für jeden dtype), und jeder von diesen speichert und indiziert und die Daten.
Das Objekt, das Sie gespeichert haben, ist das, was ich ein Storer
-Format nenne, was bedeutet, dass die numpy Arrays auf einmal geschrieben werden, also einmal geschrieben sind sie nicht änderbar. Siehe Dokumentation hier: Ссылка
PyTables-Dokumente finden Sie hier: Ссылка
Diese Strings werden leider in diesem speziellen Speicherformat als Python Pickle gespeichert, daher weiß ich nicht, ob Sie sie plattformübergreifend dekodieren können.
Sie werden es leichter haben, ein Table
-Objekt zu lesen, das mit grundlegenderen Typen gespeichert wird, die leicht exportiert werden können (es gibt beispielsweise einen Abschnitt in den Dokumenten zum Exportieren nach R).
Versuchen Sie, dieses Format zu lesen:
%Vor% Mit dem Dienstprogramm PyTables ptdump -avd tmp.h5
erhalten Sie Folgendes. Wenn Sie & lt; PyTables 3.0.0 (was gerade herausgekommen ist) oder in py3 (was wir in 0.11.1 unterstützen werden). Dann werden alle Strings utf-8-codiert als Bytes geschrieben. Vor (PyTables 3.0.0,) werden Strings als ASCII geschrieben, glaube ich.
Wahrscheinlich am besten, mich offline zu kontaktieren, um weiter zu diskutieren.