使用Vaex导出HDF5、读取CSV时出现AttributeError: can't set attribute报错
报错产生原因
- 列名不合规:原始数据(Pandas DataFrame或CSV文件)的列名包含特殊字符、空格,或是和Vaex内置的属性、方法名重名,Vaex尝试将列映射为对象属性时产生冲突,触发无法设置属性的报错。
- 版本适配问题:你使用的Vaex版本存在已知bug,或是Vaex和当前环境中的Pandas、Numpy等依赖包版本不兼容,属性赋值逻辑执行异常。
- 调用别名不统一:读取CSV的代码中使用
vx.from_csv调用方法,但导入语句为import vaex,未声明vx别名的情况下会触发属性查找失败报错。
对应解决方法
- 统一导入别名:如果习惯使用
vx作为Vaex的别名,将导入语句修改为import vaex as vx,全局保持调用别名一致。 - 批量规范列名:在转换Pandas DataFrame、读取CSV前先对列名做标准化处理,去除特殊字符、规避内置关键字,示例处理代码如下:
import re # 处理Pandas DataFrame列名 df.columns = [re.sub(r'\W+', '_', col.strip()) for col in df.columns] # 处理后再转换为Vaex对象 vaex_df = vaex.from_pandas(df, copy_index=False) vaex_df.export_hdf5('my_data.hdf5')
- 调整Vaex版本:优先升级到最新稳定版,执行命令:
pip install --upgrade vaex;如果升级后仍存在兼容问题,可降级到经过验证的稳定版本3.0.0:pip install vaex==3.0.0 - 优化CSV读取逻辑:如果读取CSV时报错,暂时关闭自动转换HDF5的参数,读取完成后手动导出即可:
vaex_df = vaex.from_csv('C83DD40F42D3_motions.csv', chunk_size=100) vaex_df.export_hdf5('my_data.hdf5')
内容的提问来源于stack exchange,提问作者Asmita Nandi
相关产品推荐
相关产品推荐

