我正在处理大型csv文件,并尝试将其转换为hdf5格式。当我尝试使用HDFviewer查看输出时,我得到的是这种奇怪的分段输出,它包含多个数据集,而不是我在其他人的hdf5文件中看到的一个很好的内聚数据集。当我尝试打开block2值时,它将使我尝试打开它的应用程序崩溃。随附的是hdfviewer打开我用熊猫生成的hdf5文件的照片。
dataset is split into several blocks and the header and index are on axis=1, and axis=0
具有类型为int,string(object)和float的标头(col1,col2,col3)的数据集示例:
+------+------+-------+-----+
| Col1 | Col2 | Col3 | ... |
+------+------+-------+-----+
| 1 | 0x00 | 100.1 | ... |
| 2 | 0x00 | 100.3 | ... |
| 3 | 0x00 | 132.3 | ... |
+------+------+-------+-----+
代码csv-> hdf5的示例:
df = pd.DataFrame()
df = pd.read_csv(csv_file)
df.to_hdf('example.h5', '/data', complib='zlib', complevel=9)
这里发生了什么?
编辑:澄清一下,我可以使用pd.read_hdf()在python中很好地打开我生成的.h5文件...但是,诸如JMP和hdfview之类的应用程序会显示我已附加的图像,并且无法正确打开它甚至崩溃。
编辑:好的,我知道为什么Pandas将我的数据集拆分为三个数据集:因为分组相同类型的数据集效率更高,所以block0是int类型,block1类型为float和block2类型为字符串的数据集。但是,当我尝试打开block2时,它将冻结hdfviewer。并且block2甚至不会出现在JMP上。
编辑:好的,我认为我发现了造成STRING BLOCK破裂的原因,但我不知道如何解决此问题
这是一个示例数据集:
+------+-------+-------+
| | Col1 | Col2 |
+------+-------+-------+
| 0 | hello | the |
| 2 | world | computer|
| 3 | lol | is |
+------+------+----------+
这是转换为hdf5时的输出:
(128, 4, 149, 185, 0, 0, 0, 0, 0, 0, 0, 140, 21, 110, 117, 109, 112, 121, 46, 99, 111, 114, 101, 46, 109, 117, 108, 116, 105, 97, 114, 114, 97, 121, 148, 140, 12, 95, 114, 101, 99, 111, 110, 115, 116, 114, 117, 99, 116, 148, 147, 148, 140, 5, 110, 117, 109, 112, 121, 148, 140, 7, 110, 100, 97, 114, 114, 97, 121, 148, 147, 148, 75, 0, 133, 148, 67, 1, 98, 148, 135, 148, 82, 148, 40, 75, 1, 75, 3, 75, 2, 134, 148, 104, 3, 140, 5, 100, 116, 121, 112, 101, 148, 147, 148, 140, 2, 79, 52, 148, 75, 0, 75, 1, 135, 148, 82, 148, 40, 75, 3, 140, 1, 124, 148, 78, 78, 78, 74, 255, 255, 255, 255, 74, 255, 255, 255, 255, 75, 63, 116, 148, 98, 136, 93, 148, 40, 140, 5, 104, 101, 108, 108, 111, 148, 140, 3, 116, 104, 101, 148, 140, 5, 119, 111, 114, 108, 100, 148, 140, 8, 99, 111, 109, 112, 117, 116, 101, 114, 148, 140, 3, 108, 111, 108, 148, 140, 2, 105, 115, 148, 101, 116, 148, 98, 46)
现在运行一个ascii->文本转换器,它显示:
¹numpy.core.multiarray_reconstructnumpyndarrayKCbR(KKKhdtypeO4KKR(K|NNNJÿÿÿÿJÿÿÿÿK?tb](hellotheworldcomputerlolisetb
因此它将实际的python代码写入hdf5文件并破坏了所有内容。这是熊猫的虫子吗?
最佳答案
参见问题#29780
.to_hdf5()pandas函数支持内部使用。将尝试附加到表并报告发生的情况。
关于python - Pandas 无法正确将csv转换为hdf5?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/58965091/