将Pandas列转为字符串后存入h5py仍报Object dtype错误的解决办法
解决Pandas String类型转存h5py的Object dtype错误
你遇到的问题核心原因是:Pandas的string dtype属于扩展数组类型(ExtensionArray),底层存储仍然是Python object数组,所以执行table_1.dtypes时会显示string但末尾标注dtype: object。而h5py不支持Pandas的扩展类型,仅识别numpy原生数据类型,因此抛出TypeError: Object dtype dtype('O') has no native HDF5 equivalent错误。
以下是具体解决方法:
转换为numpy原生字符串类型
直接将列转为numpy支持的字符串类型(如np.str_或固定长度Unicode类型),h5py可直接识别:import numpy as np # 转换为numpy Unicode字符串类型 table_1['TITLE'] = table_1['TITLE'].astype(np.str_) table_1['CONTEXT'] = table_1['CONTEXT'].astype(np.str_) # 或者指定固定长度(优化内存占用),比如长度为10的Unicode字符串 # table_1['TITLE'] = table_1['TITLE'].astype('U10')转换后可通过
table_1['TITLE'].values.dtype验证,会显示类似<U2的numpy原生类型,此时写入h5py即可正常执行。使用Pandas内置HDFStore存储(推荐如果无需直接操作h5py)
Pandas自带的HDF存储可以兼容自身的扩展类型,无需手动转换:# 写入HDF文件 table_1.to_hdf('your_file.h5', key='table_data', mode='w') # 读取文件 loaded_df = pd.read_hdf('your_file.h5', key='table_data')这种方式会保留Pandas的
stringdtype,且无需处理类型转换问题。转换为字节类型存储
将字符串编码为字节数组,h5py原生支持字节类型:# 编码为UTF-8字节 table_1['TITLE'] = table_1['TITLE'].str.encode('utf-8') table_1['CONTEXT'] = table_1['CONTEXT'].str.encode('utf-8') # 读取时解码回字符串 # loaded_df['TITLE'] = loaded_df['TITLE'].str.decode('utf-8')
内容的提问来源于stack exchange,提问作者Soumajyoti Sarkar
相关产品推荐
相关产品推荐

