使用 Pandas 从 Excel 转换为 HDF5

Converting from Excel to HDF5 using Pandas

我想将 Excel 文档的内容提取到 pandas 数据帧中,然后将该数据帧写入 HDF5 文件。为此,我这样做了:

xls_df = pd.read_excel(fn_xls)
xls_df.to_hdf(fn_h5, 'table', format='table', mode='w')

这会导致以下错误:

TypeError: Cannot serialize the column [Col1] because its data contents are [unicode] object dtype

我尝试在 Excel 文件的数据帧上使用 convert.objects() ,但这不起作用(并且不推荐使用 convert.objects() )。对此有什么建议吗?

这里有一些关于 Excel 文件的信息:

<class 'pandas.core.frame.DataFrame'>
RangeIndex: 101 entries, 0 to 100
Data columns (total 5 columns):
Col1                   101 non-null object
Col2                   101 non-null object
Col3                   94 non-null float64
Col4                   98 non-null object
Col5                   93 non-null float64
dtypes: float64(2), object(3)

第一列和第二列是字符串,第四列有一个字符串但大部分是整数,第三列和第五列是整数。

"Col4" 列中的混合字符串和整数数据类型导致在以 "table" 格式转换为 HDF5 时出错。

要保存为 hdf5 "tables" 格式,您需要将 Col4 中的数字转换为浮点数(将字符串转换为 NaN):

df["Col4"] = pd.to_numeric(df["Col4"], errors="coerce")

或者将列中的所有内容都转换为字符串:

df["Col4"] = df["Col4"].astype(str)

或使用允许列具有混合数据类型的 "fixed" hdf5 格式。这会将混合数据类型列保存在 python pickle 格式中,并且当前会给出 PerformanceWarning。

df.to_hdf(outpath, 'yourkey', format='fixed', mode='w')