首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

当从多个hdf5文件读取数据时,vaex groupby给出了TypeError: unhashable类型:'Expression‘

问题描述:当从多个hdf5文件读取数据时,使用vaex库中的groupby函数时,出现了TypeError: unhashable类型:'Expression'的错误。

答案:出现这个错误的原因是在vaex库中,groupby函数要求被分组的表达式必须是可哈希的(hashable),但是在这个问题中,传入groupby函数的表达式是不可哈希的类型。

解决这个问题的方法是将表达式转换为可哈希的类型。在vaex库中,可以使用expression函数将表达式封装为可哈希的对象。以下是解决问题的步骤:

  1. 导入必要的库和模块:
代码语言:txt
复制
import vaex
  1. 读取多个hdf5文件并将它们合并成一个表:
代码语言:txt
复制
df = vaex.open('file1.hdf5')
df = df.concat(vaex.open('file2.hdf5'))
# 继续合并其他的文件
  1. 将表达式封装为可哈希的对象:
代码语言:txt
复制
expr = vaex.expression.Expression(df)
# 将表达式替换为你需要分组的列名或表达式
groupby_expr = expr['column_name']
  1. 使用封装后的表达式进行分组:
代码语言:txt
复制
result = df.groupby(groupby_expr, vaex.agg.sum(df['column_name']))

在上述代码中,我们首先导入了vaex库,然后使用open函数读取多个hdf5文件,并将它们合并成一个表。接下来,我们使用vaex.expression.Expression函数将表达式封装为可哈希的对象,并将其替换为需要分组的列名或表达式。最后,我们使用groupby函数进行分组,并指定需要进行聚合的列和聚合函数(此处使用了sum函数作为示例)。

注意:在这个答案中,我们没有提及任何特定的云计算品牌商,但你可以根据自己的需求选择适合的云计算平台或产品来使用vaex库进行开发和部署。

参考文档:

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

快使用Vaex DataFrame,每秒数亿数据算起来 ⛵

Python数据分析实战教程但是,pandas对于大型的数据处理却并不是很高效,在读取文件甚至会消耗大量时间。...Vaex 在过去的版本中支持二进制文件格式,例如 HDF5、 Arrow 和 Parquet 。4.14.0版本以来,它也可以像使用上述格式一样轻松打开和使用巨型 CSV 文件。...上述过程的详细说明如下:① 当我们使用vaex.open()对于 CSV 文件Vaex 将流式处理整个 CSV 文件以确定行数和列数,以及每列的数据类型。...可以通过schema_infer_fraction控制 Vaex 读取文件的程度。数字越小,读取速度越快,但数据类型推断可能不太准确(因为不一定扫描完所有数据)。...'))图片 6.提前停止Vaex 有一种直接的方式来确定数据读取的规模,当我们在数据分析使用 unique, nunique或者 groupby方法,在全量数据上可能会有非常大的延,我们可以指定 limit

2.1K72

Vaex :突破pandas,快速分析100GB大数据

这里用的是hdf5文件hdf5是一种文件存储格式,相比较csv更适合存储大数据量,压缩程度高,而且读取、写入也更快。 换上今天的主角vaex读取同样的数据,做同样的平均值计算,需要多少时间呢?...使用vaex读取并计算: ? 文件读取用了9ms,可以忽略不计,平均值计算用了1s,总共1s。 同样是读取1亿行的hdfs数据集,为什么pandas需要十几秒,而vaex耗费时间接近于0呢?...美中不足的是,vaex的懒加载只支持HDF5, Apache Arrow,Parquet, FITS等文件,不支持csv等文本文件,因为文本文件没办法进行内存映射。...; vaex的优势在于: 性能:处理海量数据, 行/秒; 惰性:快速计算,不占用内存; 零内存复制:在进行过滤/转换/计算,不复制内存,在需要进行流式传输; 可视化:内含可视化组件; API:...读取数据 vaex支持读取hdf5、csv、parquet等文件,使用read方法。hdf5可以惰性读取,而csv只能读到内存中。 ? vaex数据读取函数: ?

3K31
  • Vaex :突破pandas,快速分析100GB大数据

    这里用的是hdf5文件hdf5是一种文件存储格式,相比较csv更适合存储大数据量,压缩程度高,而且读取、写入也更快。 换上今天的主角vaex读取同样的数据,做同样的平均值计算,需要多少时间呢?...使用vaex读取并计算: 文件读取用了9ms,可以忽略不计,平均值计算用了1s,总共1s。 同样是读取1亿行的hdfs数据集,为什么pandas需要十几秒,而vaex耗费时间接近于0呢?...美中不足的是,vaex的懒加载只支持HDF5, Apache Arrow,Parquet, FITS等文件,不支持csv等文本文件,因为文本文件没办法进行内存映射。...; vaex的优势在于: 性能:处理海量数据, 行/秒; 惰性:快速计算,不占用内存; 零内存复制:在进行过滤/转换/计算,不复制内存,在需要进行流式传输; 可视化:内含可视化组件; API:...类似pandas,拥有丰富的数据处理和计算函数; 可交互:配合Jupyter notebook使用,灵活的交互可视化; 安装vaex 使用pip或者conda进行安装: 读取数据 vaex支持读取hdf5

    2.5K70

    搞定100万行数据:超强Python数据分析利器

    如果你的数据不是内存映射文件格式(例如CSV、JSON),则可以通过与Vaex结合Pandas I/O轻松地转换它。 我们可以将它转换为HDF5并用Vaex处理它!...dv = vaex.from_csv(file_path, convert=True, chunk_size=5_000_000) 上面的函数将自动创建一个HDF5文件并将其保存到硬盘。...检查一下dv类型: type(dv) # output vaex.hdf5.dataset.Hdf5MemoryMapped 现在,让我们用Vaex处理7.5GB的数据集——我们不需要读取它,因为我们在上面的...dv = vaex.open('big_file.csv.hdf5') Vaex需要不到1秒的时间来执行上面的命令。但Vaex实际上并没有读取文件,因为延迟加载。...使用Numpy执行时,只需要30秒(11亿行)。当我们对numba预编译表达式执行同样的操作,我们的执行时间大约快了2.5倍,至少在我们的测试电脑上是这样。如果有一个英伟达显卡,可以尝试一下!

    2.1K1817

    使用Python『秒开』100GB+数据

    数据清洗 第一步将数据转换为内存映射文件格式,如Apache Arrow、Apache Parque 或HDF5。一旦数据成为内存映射格式,使用Vaex打开它是瞬间的(数据的磁盘大小超过100GB)。...将CSV数据转换为HDF5的代码如下: ? 为什么这么快? 当你使用Vaex打开内存映射文件,实际上没有数据读取。...Vaex读取文件数据,比如磁盘上数据的位置、数据结构(行数、列数、列名和类型)、文件描述等等。那么,如果我们想要检查或与数据交互呢?打开一个数据集会得到一个标准的DataFrame: ?...这是因为显示Vaex DataFrame或列只需要从磁盘读取前5行和后5行。这就引出了另一个重要的问题:Vaex只会在必要遍历整个数据集,而且它会尽可能少地遍历数据。 现在开始清理数据集。...在过滤Vaex DataFrame,不会生成数据副本。相反,只创建对原始对象的引用,并在其上应用二进制掩码。掩码选择显示哪些行并用于将来的计算。

    1.4K01

    0.052s 打开 100GB 数据,这个开源库火爆了!

    在这种情况下,你仍然必须管理云数据存储区,每次实例启动,都需要等待数据存储空间传输到实例,同时,还要考虑将数据存储在云上的合规性问题,以及在远程计算机上工作带来的不便。...第一步是将数据转换为内存可映射文件格式,例如Apache Arrow,Apache Parquet或HDF5。在此处也可以找到如何将CSV数据转换为HDF5的示例。...数据变为内存可映射格式后,即使在磁盘上的大小超过100GB,也可以使用Vaex即时打开(只需0.052秒!): 为什么这么快?使用Vaex打开内存映射文件,实际上没有进行任何数据读取。...Vaex读取文件的元数据,例如磁盘上数据的位置,数据结构(行数、列数、列名和类型),文件说明等。那么,如果我们要检查数据或与数据交互怎么办?...这将我们引向另一个重点:Vaex只会在需要遍历整个数据集,并且会尝试通过尽可能少的数据传递来做到这一点。 无论如何,让我们极端异常值或错误数据输入值开始清除此数据集。

    80210

    0.052秒打开100GB数据?这个Python开源库这样做数据分析

    在这种情况下,你仍然必须管理云数据存储区,每次实例启动,都需要等待数据存储空间传输到实例,同时,还要考虑将数据存储在云上的合规性问题,以及在远程计算机上工作带来的不便。...打开100GB数据集只需0.052秒 第一步是将数据转换为内存可映射文件格式,例如Apache Arrow,Apache Parquet或HDF5。...使用Vaex打开内存映射文件,实际上没有进行任何数据读取Vaex读取文件的元数据,例如磁盘上数据的位置,数据结构(行数、列数、列名和类型),文件说明等。...这是因为显示Vaex DataFrame或列仅需要从磁盘读取前后5行数据。这将我们引向另一个重点:Vaex只会在需要遍历整个数据集,并且会尝试通过尽可能少的数据传递来做到这一点。...无论如何,让我们极端异常值或错误数据输入值开始清除此数据集。一个很好的方法是使用describe方法对数据进行高级概述,其中显示了样本数、缺失值数和每一列的数据类型

    1.3K20

    如何用Python在笔记本电脑上分析100GB数据(上)

    在这种情况下,您仍然需要管理云数据桶,等待每次实例启动桶到实例的数据传输,处理将数据放到云上所带来的遵从性问题,以及处理在远程机器上工作所带来的所有不便。...清扫街道 第一步是将数据转换为内存映射文件格式,如Apache Arrow、Apache Parquet或HDF5。在这里可以找到如何将CSV数据转换为HDF5的示例。...一旦数据是内存映射格式,使用Vaex打开它是瞬间的(0.052秒!),尽管磁盘上的容量超过100GB: ? 使用Vaex打开内存映射文件是即时的(0.052秒!),即使它们超过100GB大。...您使用Vaex打开内存映射文件,实际上没有数据读取Vaex读取文件数据,比如磁盘上数据的位置、数据结构(行数、列数、列名和类型)、文件描述等等。那么,如果我们想要检查或与数据交互呢?...这是因为显示Vaex DataFrame或列只需要从磁盘读取前5行和后5行。这就引出了另一个重要的问题:Vaex只会在必要遍历整个数据集,而且它会尽可能少地传递数据

    1.1K21

    python3表格数据处理

    80GB大小的表格文件,那么用pandas和xlrd都是没办法处理的,因为这已经远远超出了内存可支持的空间。...数据格式转换 在上一章节的测试中,我们用到了1个没有提到过的文件:data.hdf5,这个文件其实是data.csv转换而来的。...但是这种操作方式有个弊端,就是生成的hdf5文件vaex不是直接适配的关系,如果直接用df = vaex.open('data.hdf5')的方法进行读取的话,输出内容如下所示: In [3]: df...执行完毕后在当前目录下生成了一个vaex_data.hdf5文件,让我们再试试读取这个新的hdf5文件: [dechin@dechin-manjaro gold]$ ipython Python 3.8.5...这里我们也需要提一下,在新的hdf5文件中,索引从高、低等中文变成了h、l等英文,这是为了方便数据的操作,我们在csv文件中将索引手动的修改成了英文,再转换成hdf5的格式。

    2.8K20

    如何使用 Python 分析笔记本电脑上的 100 GB 数据

    清理街道 第一步是将数据转换为内存可映射文件格式,如 Apache Arrow、Apache Parquet 或 HDF5。...使用 Vaex 打开内存映射文件只需要 0.052 秒,即使它们超过 100 GB 为什么这么快?使用 Vaex 打开内存映射文件,实际上没有数据读取。...Vaex读取文件数据,如磁盘上数据的位置、数据结构(行数、列数、列名和类型)、文件描述等。那么,如果我们想检查数据或与数据交互呢?...这就引出了另一个重要的问题:Vaex 只会在必须的时候遍历整个数据集,它会尽可能少地传递数据。 无论如何,让我们首先从极端异常值或错误的数据输入中清除这个数据集。...到达目的地 我希望这篇文章是对 Vaex 的一个有用的介绍,它将帮助缓解你可能面临的一些「不舒服的数据」问题,至少涉及到表格数据集时会对你有帮助。

    1.2K22

    对比Vaex, Dask, PySpark, Modin 和Julia

    即使在单台PC上,也可以利用多个处理核心来加快计算速度。 Dask处理数据框的模块方式通常称为DataFrame。...load_transactions —读取〜700MB CSV文件 load_identity —读取〜30MB CSV文件 merge—通过字符串列判断来将这两个数据集合 aggregation—将6...作者创建该库是为了使数据集的基础分析更加快速。Vaex虽然不支持Pandas的全部功能,但可以计算基本统计信息并快速创建某些图表类型Vaex语法 Pandas和vaex语法之间没有太多区别。 ?...另外这里有个小技巧,pandas读取csv很慢,例如我自己会经常读取5-10G左右的csv文件,这时在第一次读取后使用to_pickle保存成pickle文件,在以后加载用read_pickle读取pickle...文件,不仅速度上会快10几倍,文件的大小也会有2-5倍的减小(减小程度取决于你dataframe的内容和数据类型) 最后总结还是那句话,数据能全部加载到内存里面的时候,用Pandas就对了 作者:

    4.6K10

    Python编程常见问题与解答

    并且,最好切换到Python安装目录中的scripts子目录中执行,在安装了多个Python版本这一点非常重要。...12.问:我创建了一个集合,想在里面加入一个列表作为元素,结果提示“TypeError: unhashable type: 'list'”,这是什么意思呢?...25.问:“资源管理器”来看,我当前文件夹中明明有test.txt文件,但是使用内置函数open()打开还是提示文件不存在,可能是哪里错了呢?...答:默认情况下,“资源管理器”会隐藏一些常见类型文件的扩展名,去掉这个隐藏,检查一下文件的名字是不是test.txt.txt。...答:也不是,如果需要读取前面已经读取过的内容,可以使用文件对象的seek()方法修改文件指针的位置。

    3.5K10

    《Pandas Cookbook》第10章 时间序列分析1. Python和Pandas日期工具的区别2. 智能切分时间序列3. 只使用适用于DatetimeIndex的方法4. 计算每周的犯罪数5.

    智能切分时间序列 # hdf5文件crime.h5读取丹佛市的crimes数据集,输出列数据数据类型数据的前几行 In[44]: crime = pd.read_hdf('data/crime.h5...# 注意到有三个类型列和一个Timestamp对象列,这些数据数据类型在创建就建立了对应的数据类型。 # 这和csv文件非常不同,csv文件保存的只是字符串。...原理 # hdf5文件可以保存每一列的数据类型,可以极大减少内存的使用。 # 在上面的例子中,三个列被存成了类型,而不是对象。存成对象的话,消耗的内存会变为之前的四倍。...只使用适用于DatetimeIndex的方法 # 读取crime hdf5数据集,行索引设为REPORTED_DATE,检查其数据类型 In[63]: crime = pd.read_hdf('data...# 上面的结果中,6月30日的数据只有一条,这也是因为第一个时间值的原因。 # 所有的DateOffsets对象都有一个normalize参数,其设为True,会将所有时间归零。

    4.7K10

    跟着小鱼头学单细胞测序-如何使用Cell Ranger V6 (一)

    相信大家在平时的科研工作中对10X数据并不陌生, 而Cell Ranger软件作为由10X官方开发的配套分析软件,颇受欢迎。今天我们就大家介绍一下这款软件主要分析流程和使用。...正文 Cell Ranger是10X公司专门为单细胞RNA测序数据量身打造的分析软件,能够通过直接读取原始下机测序数据,进行比对,定量,聚类, 可视化以及更多的基因表达相关的下游分析,并且结合配套的浏览平台...以下文中软件信息及代码均Cell Ranger官网获取【1】。...: /outs/cloupe.cloupe 结果中需要重点查看的有网页版报告(web_summary.html),该报告列出了详细的数据QC的信息,可用于判断该数据测序质量...例如处理多个生物学重复样本,首先分别对每个样本单独的进行cellranger count定量, 然后通过aggr整合。

    2.2K40

    Python3 错误和异常

    某些编程语言有这样的函数:输入存在非法数据不能被安全地调用,或者返回值不能与异常进行有效的区别。例如,C语言中的atoi函数(ASCII串到整数的转换)在输入非法可以返回0。... ZeroDivisionError as err: # 赋值err变量     print("出现异常:", err) except TypeError:  # 声明一个指定的异常类型     print...运行结果: 出现异常: division by zero 一个except子句可以同时处理多个异常,这些异常将被放在一个括号里成为一个元组,例如: except (RuntimeError, TypeError...except TypeError:  # 声明一个指定的异常类型     print("出现类型异常!")...创建一个模块有可能抛出多种不同的异常,一种通常的做法是为这个包建立一个基础异常类,然后基于这个基础类为不同的错误情况创建不同的子类: class Error(Exception):     """Base

    92710
    领券