熊猫to_hdf在包含可空int dtypes(例如Int8Dtype)的数据帧上失败

时间:2019-05-20 17:57:43

标签: pandas nullable hdf5 pytables

我正在尝试减少一些我们处理的大数据的内存消耗,以便可以在不引发内存错误的情况下将更多数据附加到其中。在可能的情况下向下转换float会有所帮助,但是我发现主要的节省是通过在可能的地方将float64转换为Int8和Int16来实现的。此数据包含NaN。这是不可避免的,并且在上下文中没有可以替换的NaN值,不会改变数据的含义。新的可为空的dtypes非常适合此操作,但我得到ValueError:尝试将结果帧保存到hdf时无法将float NaN转换为整数。

我尝试在不指定表格式的情况下使用to_hdf,并得到不同的错误(未指定表格式,错误为AttributeError:'NoneType'对象没有属性'names')

´´´
df=pd.DataFrame([1,2,3,np.nan,5], columns=['A'])
df.to_hdf('Z:/test.hd5', 'data')
#This works

df['A']=df.A.astype(pd.Int8Dtype())
df.to_hdf('Z:/test.hd5', 'data')

Traceback (most recent call last):

  File "<ipython-input-51-6b0f3ad26286>", line 1, in <module>
    df.to_hdf('Z:/test.hd5', 'data', complevel=9, complib='blosc:zlib')

  File "C:\Users\marnoch.hamilton-jon\AppData\Local\Continuum\anaconda3       \lib\site-packages\pandas\core\generic.py", line 2377, in to_hdf
    return pytables.to_hdf(path_or_buf, key, self, **kwargs)

  File "C:\Users\marnoch.hamilton-jon\AppData\Local\Continuum\anaconda3\lib\site-packages\pandas\io\pytables.py", line 274, in to_hdf
    f(store)

  File "C:\Users\marnoch.hamilton-jon\AppData\Local\Continuum\anaconda3\lib\site-packages\pandas\io\pytables.py", line 268, in <lambda>
    f = lambda store: store.put(key, value, **kwargs)

  File "C:\Users\marnoch.hamilton-jon\AppData\Local\Continuum\anaconda3 \lib\site-packages\pandas\io\pytables.py", line 889, in put
    self._write_to_group(key, value, append=append, **kwargs)

  File "C:\Users\marnoch.hamilton-jon\AppData\Local\Continuum\anaconda3\lib\site-packages\pandas\io\pytables.py", line 1415, in _write_to_group
    s.write(obj=value, append=append, complib=complib, **kwargs)

  File "C:\Users\marnoch.hamilton-jon\AppData\Local\Continuum\anaconda3 \lib\site-packages\pandas\io\pytables.py", line 3022, in write
    blk.values, items=blk_items)

  File "C:\Users\marnoch.hamilton-jon\AppData\Local\Continuum\anaconda3\lib\site-packages\pandas\io\pytables.py", line 2750, in write_array
    atom = _tables().Atom.from_dtype(value.dtype)

  File "C:\Users\marnoch.hamilton-jon\AppData\Local\Continuum\anaconda3\lib\site-packages\tables\atom.py", line 381, in from_dtype
    if basedtype.names:

 AttributeError: 'NoneType' object has no attribute 'names'
´´´

这是一个错误吗?有意限制吗?还是我做了一些愚蠢的事情?

1 个答案:

答案 0 :(得分:0)

这是一个错误。有关状态,请参见GitHub Issue #26144