Сбои Pandas to_hdf на фреймах данных, содержащих недействительные типы int (например, Int8Dtype) - PullRequest
1 голос
/ 20 мая 2019

Я пытаюсь уменьшить потребление памяти некоторыми большими данными, с которыми мы работаем, чтобы к ним можно было добавлять больше данных без ошибок памяти.Понижение числа поплавков, где это возможно, немного помогает, но я обнаружил, что основная экономия была получена от использования типов float64 Int8 и Int16, где это возможно.Эти данные содержат NaNs.Это неизбежно, и в контексте нет никакой ценности, которую я мог бы заменить NaN, которая не меняет смысл данных.Новые ntylable dtypes отлично подходят для этого, но я получаю ValueError: не могу преобразовать плавающий NaN в целое при попытке сохранить результирующие кадры в формате hdf.

Я пытался использовать 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 голосов
/ 21 мая 2019

Это ошибка. См. GitHub Issue # 26144 , чтобы узнать статус.

...