【发布时间】:2020-03-16 19:19:32
【问题描述】:
我正在处理大型 csv 文件并尝试将它们转换为 hdf5 格式。当我尝试使用 HDFviewer 查看输出时,我得到了这个由多个数据集组成的奇怪的分段输出,而不是我在其他人的 hdf5 文件中看到的一个很好的内聚数据集。当我尝试打开 block2 值时,它会使我尝试打开它的应用程序崩溃。附上 hdfviewer 打开我用 pandas 生成的 hdf5 文件的照片。
dataset is split into several blocks and the header and index are on axis=1, and axis=0
带有标题(col1、col2、col3)的数据集示例,类型为 int、string(object) 和 float:
+------+------+-------+-----+
| 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 上。
编辑:好的,我想我找到了导致字符串块断裂的原因,但我不知道如何解决这个问题
这是一个示例数据集:
+------+-------+-------+
| | 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 文件并破坏一切。这是熊猫的错误吗?
【问题讨论】:
-
先尝试修复错误,然后告诉我们您的尝试。
-
对不起,如果原始帖子不清楚,我的问题是使用 hdfview 检查时的 .h5 输出真的很奇怪,我无法打开它使用其他软件生成的第二个值块。但是可以使用 pandas read_hdf() 函数完美地读回它。
-
好的,你能看看我最新的编辑吗?我发现字符串数据集的输出是以ASCII格式输出的,因为是python代码,所以任何软件都无法读取。