当前位置: 首页 > 面试题库 >

将大型CSV转换为HDF5

鲜于允晨
2023-03-14
问题内容

我有一个100M的CSV文件(实际上是许多单独的CSV文件),总计84GB。我需要将其转换为具有单个float数据集的HDF5文件。我在测试中使用
h5py 时没有任何问题,但是现在我无法在没有内存不足的情况下完成最终数据集。

如何在不必将整个数据集存储在内存中的情况下写入HDF5?我期望这里有实际的代码,因为它应该很简单。

我只是在研究 pytables ,但看起来数组类(与HDF5数据集相对应)不能被迭代地写入。同样, pandas在中
具有read_csvto_hdf方法io_tools,但是我无法一次加载整个数据集,因此无法正常工作。也许您可以使用pytables或pandas中的其他工具来帮助我正确解决问题。


问题答案:

用于append=True呼叫to_hdf

import numpy as np
import pandas as pd

filename = '/tmp/test.h5'

df = pd.DataFrame(np.arange(10).reshape((5,2)), columns=['A', 'B'])
print(df)
#    A  B
# 0  0  1
# 1  2  3
# 2  4  5
# 3  6  7
# 4  8  9

# Save to HDF5
df.to_hdf(filename, 'data', mode='w', format='table')
del df    # allow df to be garbage collected

# Append more data
df2 = pd.DataFrame(np.arange(10).reshape((5,2))*10, columns=['A', 'B'])
df2.to_hdf(filename, 'data', append=True)

print(pd.read_hdf(filename, 'data'))

产量

    A   B
0   0   1
1   2   3
2   4   5
3   6   7
4   8   9
0   0  10
1  20  30
2  40  50
3  60  70
4  80  90

请注意,您需要format='table'在第一个调用中使用df.to_hdf以使表可追加。否则,'fixed'默认情况下为格式,这对于读写来说是更快的,但是会创建一个不能追加的表。

因此,您可以一次处理一个CSV,用于append=True构建hdf5文件。然后覆盖DataFrame或用于del df允许对旧DataFrame进行垃圾回收。

另外,df.to_hdf您也可以将其附加到HDFStore上,而不用调用:

import numpy as np
import pandas as pd

filename = '/tmp/test.h5'
store = pd.HDFStore(filename)

for i in range(2):
    df = pd.DataFrame(np.arange(10).reshape((5,2)) * 10**i, columns=['A', 'B'])
    store.append('data', df)

store.close()

store = pd.HDFStore(filename)
data = store['data']
print(data)
store.close()

产量

    A   B
0   0   1
1   2   3
2   4   5
3   6   7
4   8   9
0   0  10
1  20  30
2  40  50
3  60  70
4  80  90


 类似资料:
  • 问题内容: 我正在尝试做的事情似乎不仅应该很简单地完成,而且应该是足够普通的任务,以至于可以使用简单的程序包来完成它。我希望获取一个大型CSV文件(从关系数据库表中导出),并将其转换为JavaScript对象数组。此外,我想将其导出到文件装置中。 CSV示例: 所需的JSON: 我已经尝试了几个节点CSV解析器,流媒体,自称CSV到JSON的库,但是似乎无法获得想要的结果,或者如果文件较小,它是否

  • 问题内容: 我想将从下面的脚本中获取的HTML表转换为CSV文件,但是出现如下类型错误: TypeError:序列项0:预期的字符串,找到标记 将其转换为CSV文件的最简单方法是什么?我尝试为: 但它写了“无” HTML是这样的: 问题答案: 这是csv lib的工作,将每一个td放入每一行并提取文本,它将处理每一行中缺少值的地方: 与您在页面上看到的表格完全匹配的表格: 如果您想使用字幕: 但是

  • 问题内容: 有谁知道是否有可以让我将XLS最好转换为JSON的应用程序? 我还将为CSV转换程序做准备,因为如果周围什么都没有的话,我可能最终不得不写自己。 问题答案: 这对我来说效果很好,不需要上传文件: https://github.com/cparker15/csv-to- json?files=1

  • 问题内容: 如何使用模块将带有定界符的CSV文件转换为XLS(Excel工作表)? 问题答案: 好吧,你去…

  • 问题内容: 如何将数组转换为CSV文件? 这是我的数组: 问题答案: 我正在使用以下功能;它是对fputscsv注释中的man条目之一的改编。而且您可能想要展平该数组;不知道如果您传递一个多维的行会发生什么。

  • 问题内容: 我尝试使用json格式的文件作为输入。这是示例数据的片段。 可以在r中使用这种复杂的json格式制作一个csv,以便更平滑地处理数据吗? 例如,有以下基本类别:基本信息照片创建者位置类别网址 可以制作带有basic_information.id,creator.id等子类别类别的csv文件吗? 问题答案: 在研究您的答案时,我在评论中张贴了一些链接,但现在我非常确信这是解决问题的方法。