Python Pandas to_hdf()类型错误:类型为';int';没有len()

Python Pandas to_hdf()类型错误:类型为';int';没有len(),python,pandas,hdf,Python,Pandas,Hdf,我想存储一个pandas数据帧,这样当我以后再次加载它时,我只加载它的某些列,而不是整个内容。因此,我试图以hdf格式存储熊猫数据帧。DataFrame包含一个numpy数组,我得到以下错误消息 有没有关于如何消除错误的想法,或者我可以用什么格式来代替 代码: 将熊猫作为pd导入 将numpy作为np导入 df=pd.DataFrame({“a”:[1,2,3,4],“b”:[1,2,3,4]}) df[“c”]=[np.one((4,4))表示范围(4)内的i] df.to_hdf(“test

我想存储一个pandas数据帧,这样当我以后再次加载它时,我只加载它的某些列,而不是整个内容。因此,我试图以hdf格式存储熊猫数据帧。DataFrame包含一个numpy数组,我得到以下错误消息

有没有关于如何消除错误的想法,或者我可以用什么格式来代替

代码:

将熊猫作为pd导入
将numpy作为np导入
df=pd.DataFrame({“a”:[1,2,3,4],“b”:[1,2,3,4]})
df[“c”]=[np.one((4,4))表示范围(4)内的i]
df.to_hdf(“test.h5”,“df”,format='table',data\u columns=True)
错误:

TypeError                                 Traceback (most recent call last)
<ipython-input-2-ace42e5ccbb7> in <module>
----> 1 df.to_hdf("test.h5", "df", format='table', data_columns=True)

/opt/conda/lib/python3.7/site-packages/pandas/core/generic.py in to_hdf(self, path_or_buf, key, mode, complevel, complib, append, format, index, min_itemsize, nan_rep, dropna, data_columns, errors, encoding)
   2619             data_columns=data_columns,
   2620             errors=errors,
-> 2621             encoding=encoding,
   2622         )
   2623 

/opt/conda/lib/python3.7/site-packages/pandas/io/pytables.py in to_hdf(path_or_buf, key, value, mode, complevel, complib, append, format, index, min_itemsize, nan_rep, dropna, data_columns, errors, encoding)
    278             path_or_buf, mode=mode, complevel=complevel, complib=complib
    279         ) as store:
--> 280             f(store)
    281     else:
    282         f(path_or_buf)

/opt/conda/lib/python3.7/site-packages/pandas/io/pytables.py in <lambda>(store)
    270             errors=errors,
    271             encoding=encoding,
--> 272             dropna=dropna,
    273         )
    274 

/opt/conda/lib/python3.7/site-packages/pandas/io/pytables.py in put(self, key, value, format, index, append, complib, complevel, min_itemsize, nan_rep, data_columns, encoding, errors, track_times, dropna)
   1104             errors=errors,
   1105             track_times=track_times,
-> 1106             dropna=dropna,
   1107         )
   1108 

/opt/conda/lib/python3.7/site-packages/pandas/io/pytables.py in _write_to_group(self, key, value, format, axes, index, append, complib, complevel, fletcher32, min_itemsize, chunksize, expectedrows, dropna, nan_rep, data_columns, encoding, errors, track_times)
   1753             nan_rep=nan_rep,
   1754             data_columns=data_columns,
-> 1755             track_times=track_times,
   1756         )
   1757 

/opt/conda/lib/python3.7/site-packages/pandas/io/pytables.py in write(self, obj, axes, append, complib, complevel, fletcher32, min_itemsize, chunksize, expectedrows, dropna, nan_rep, data_columns, track_times)
   4222             min_itemsize=min_itemsize,
   4223             nan_rep=nan_rep,
-> 4224             data_columns=data_columns,
   4225         )
   4226 

/opt/conda/lib/python3.7/site-packages/pandas/io/pytables.py in _create_axes(self, axes, obj, validate, nan_rep, data_columns, min_itemsize)
   3892                 nan_rep=nan_rep,
   3893                 encoding=self.encoding,
-> 3894                 errors=self.errors,
   3895             )
   3896             adj_name = _maybe_adjust_name(new_name, self.version)

/opt/conda/lib/python3.7/site-packages/pandas/io/pytables.py in _maybe_convert_for_string_atom(name, block, existing_col, min_itemsize, nan_rep, encoding, errors)
   4885         # we cannot serialize this data, so report an exception on a column
   4886         # by column basis
-> 4887         for i in range(len(block.shape[0])):
   4888             col = block.iget(i)
   4889             inferred_type = lib.infer_dtype(col, skipna=False)

TypeError: object of type 'int' has no len()
TypeError回溯(最近一次调用)
在里面
---->1 df.to_hdf(“test.h5”,“df”,format='table',data\u columns=True)
/opt/conda/lib/python3.7/site-packages/pandas/core/generic.py in to_hdf(self、path_或_buf、key、mode、complevel、complib、append、format、index、min_itemsize、nan_rep、dropna、数据列、错误、编码)
2619数据列=数据列,
2620错误=错误,
->2621编码=编码,
2622         )
2623
/opt/conda/lib/python3.7/site-packages/pandas/io/pytables.py in to_hdf(路径_或_buf、键、值、模式、complevel、complib、append、格式、索引、最小项大小、nan_rep、dropna、数据列、错误、编码)
278路径_或_buf,mode=mode,complevel=complevel,complib=complib
279)作为存储:
-->280楼(商店)
281其他:
282 f(路径或边界)
/opt/conda/lib/python3.7/site-packages/pandas/io/pytables.py in(商店)
270错误=错误,
271编码=编码,
-->272 dropna=dropna,
273         )
274
/opt/conda/lib/python3.7/site-packages/pandas/io/pytables.py输入(self、key、value、format、index、append、complib、complevel、min_itemsize、nan_rep、data_列、编码、错误、跟踪时间、dropna)
1104错误=错误,
1105轨次=轨次,
->1106 dropna=dropna,
1107         )
1108
/opt/conda/lib/python3.7/site-packages/pandas/io/pytables.py in_write_to_组(self、key、value、format、axes、index、append、complib、complevel、fletcher32、min_itemsize、chunksize、expectedrows、dropna、nan_rep、数据列、编码、错误、跟踪时间)
1753南代表=南代表,
1754数据列=数据列,
->1755轨次=轨次,
1756         )
1757
/opt/conda/lib/python3.7/site-packages/pandas/io/pytables.py写入(self、obj、axes、append、complib、complevel、fletcher32、min_itemsize、chunksize、expectedrows、dropna、nan_rep、data_columns、track_times)
4222最小项目大小=最小项目大小,
4223 nan_代表=nan_代表,
->4224数据列=数据列,
4225         )
4226
/创建轴中的opt/conda/lib/python3.7/site-packages/pandas/io/pytables.py(self、axes、obj、validate、nan_rep、data_columns、min_itemsize)
3892 nan_代表=nan_代表,
3893编码=自编码,
->3894错误=自我错误,
3895             )
3896 adj_name=_maybe_adjust_name(新名称,self.version)
/opt/conda/lib/python3.7/site-packages/pandas/io/pytables.py in_maybe_convert_for_string_atom(名称、块、现有列、最小项大小、nan代表、编码、错误)
4885#我们无法序列化此数据,因此在列上报告异常
4886#按列计算
->4887表示范围内的i(透镜(块形状[0]):
4888 col=块体iget(i)
4889推断类型=库。推断类型(col,skipna=False)
TypeError:类型为“int”的对象没有len()

熊猫似乎无法序列化数据帧中的numpy数组。因此,我建议将
numpy
数据存储在单独的
*.h5
文件中

import pandas as pd
import numpy as np
import h5py

df = pd.DataFrame({"a": [1,2,3,4], "b": [1,2,3,4]})
df.to_hdf("pandas_data.h5", "df", format='table', data_columns=True)

c =  [np.ones((4,4)) for i in range(4)]
with h5py.File('numpy_data.h5', 'w') as hf:
    hf.create_dataset('dataset_1', data=c)
然后,您可以使用以下命令将该数据加载回中:'

with h5py.File('numpy_data.h5', 'r') as hf:
    c_out = hf['dataset_1'][:]

df = pd.read_hdf('pandas_data.h5', 'df')
df['c'] = list(c_out)

一个选项是在保存之前强制转换整个内容
astype(str)
。据报道,看起来这可能是一个开放的bug