我有一个非常大的数据集,我通过append以块形式写入hdf5,如下所示:
with pd.HDFStore(self.train_store_path) as train_store:
for filepath in tqdm(filepaths):
with open(filepath, 'rb') as file:
frame = pickle.load(file)
if frame.empty:
os.remove(filepath)
continue
try:
train_store.append(
key='dataset', value=frame,
min_itemsize=itemsize_dict)
os.remove(filepath)
except KeyError as e:
print(e)
except ValueError as e:
print(frame)
print(e)
except Exception as e:
print(e)
数据太大,无法加载到一个DataFrame中,因此我想尝试使用vaex进行进一步处理。不过有几件事我不太明白。
由于vaex在hdf5中使用了不同于pandas/pytables(VOTable)的表示形式,我想知道如何在这两种格式之间进行转换。我尝试将数据块加载到pandas中,将其转换为vaex数据帧,然后将其存储,但似乎没有办法将数据附加到现有的vaex hdf5文件中,至少我找不到。
真的没有办法从VAEX内部创建一个大的hdf5数据集吗?将现有数据集转换为VAEX的表示形式(通过python脚本或TOPCAT构造文件)是唯一的选择吗?
与我前面的问题相关,如果我在vaex中使用一个大的数据集,那么是否可以将我在vaex中应用的任何转换的结果持久化到hdf5文件中?
这种存储格式的问题是它不是基于列的,这不能很好地处理具有大量行的数据集,因为例如,如果只处理1列,OS可能也会读取其他列的大部分,并且CPU缓存也会因此受到污染。最好将它们存储为基于列的格式,如VAEX'hdf5格式或箭头格式。
转换到vaex数据帧可以使用以下方法完成:
import vaex
vaex_df = vaex.from_pandas(pandas_df, copy_index=False)
您可以对每个数据帧执行此操作,并将它们存储在磁盘上,如hdf5或箭头所示:
vaex_df.export('batch_1.hdf5') # or 'batch_1.arrow'
df1 = vaex.open('batch_1.hdf5')
df2 = vaex.open('batch_2.hdf5')
df = vaex.concat([df1, df2]) # will be seen as 1 dataframe without mem copy
df_altnerative = vaex.open('batch*.hdf5') # same effect, but only needs 1 line
如果您对dataframe进行转换,您可以写出计算值,或者获得包含以下转换的“状态”:
import vaex
df = vaex.example()
df['difference'] = df.x - df.y
# df.export('materialized.hdf5', column_names=['difference']) # do this if IO is fast, and memory abundant
# state = df.state_get() # get state in memory
df.state_write('mystate.json') # or write as json
import vaex
df = vaex.example()
# df.join(vaex.open('materialized.hdf5')) # join on rows number (super fast, 0 memory use!)
# df.state_set(state) # or apply the state from memory
df.state_load('mystate.json') # or from disk
df
问题内容: 我有一个100M的CSV文件(实际上是许多单独的CSV文件),总计84GB。我需要将其转换为具有单个float数据集的HDF5文件。我在测试中使用 h5py 时没有任何问题,但是现在我无法在没有内存不足的情况下完成最终数据集。 如何在不必将整个数据集存储在内存中的情况下写入HDF5?我期望这里有实际的代码,因为它应该很简单。 我只是在研究 pytables ,但看起来数组类(与HDF5
问题内容: 我有一个带有列名称的数据集“城市” 我使用以下代码,并将列名命名为 在pandas._period.Period数据类型中。 我希望列为 我希望在输出列名称中使用小写字母“ q”。 谢谢。 问题答案: 您需要使用什么: 样品:
问题内容: 我试图将输出转换为熊猫数据框,但我很努力。我有这个清单 我想创建一个具有3列和3行的熊猫数据框。我尝试使用 但它似乎对我不起作用。任何帮助,将不胜感激。 问题答案: 您需要转换为然后:
我想从InstaCart https://www.InstaCart.com/datasets/grocery-shopping-2017加载大型.csv(3.4百万行,20.6万用户)开源数据集 基本上,我在将orders.csv加载到Pandas数据帧中时遇到了麻烦。我想学习将大文件加载到Pandas/Python中的最佳实践。
问题内容: 我的问题与此非常相似,但是我需要转换整个数据框,而不仅仅是转换一系列数据框。该功能一次只能在一个系列上使用,不能很好地替代不推荐使用的命令。有没有办法获得与新熊猫版本中的命令相似的结果? 谢谢MikeMüller的示例。如果所有值都可以转换为整数,则效果很好。如果在我的数据帧中我有无法转换为整数的字符串怎么办?例: 然后,我可以运行不赞成使用的函数并获取: 运行命令会给我错误,即使尝试
问题内容: 我需要将列表转换为一列熊猫数据框 当前列表(len = 3): 所需的熊猫DF(形状= 3,): 请注意,这些数字代表上述“必需熊猫” DF中的索引。 问题答案: 采用: 谢谢DYZ: