Pandas DataFrame MultiIndex из кортежей, добавляемых в HDF5, не может соответствовать существующей структуре таблицы - PullRequest
1 голос
/ 28 января 2020

У меня проблема с добавлением кадров данных MultiIndex pandas в базу данных HDF5. Вот мой код:

    import pandas as pd
    import numpy as np

    index = pd.MultiIndex(levels=[['foo', 'bar', 'baz', 'qux'],
                                  ['one', 'two', 'three']],
                          codes=[[0, 0, 0, 1, 1, 2, 2, 3, 3, 3],
                                 [0, 1, 2, 0, 1, 1, 2, 0, 1, 2]],
                          names=['foo', 'bar'])

    data = np.random.randn(10, 3)


    df_mi = pd.DataFrame(data, index=index,
                          columns=['A', 'B', 'C'])

    print(df_mi)

    store = pd.HDFStore('test_1.h5')
    store.append('frame_0', df_mi)

    df_mi_1 = pd.DataFrame(data,
            index=['one', 'two', 'three', 'one', 'two', 'two', 'three', 'one', 'two', 'three'],
            columns=['A', 'B', 'C'])

    store.close()

    index_0 = ['foo', 'foo', 'foo', 'bar', 'bar', 'baz', 'baz', 'qux', 'qux', 'qux']
    df_mi_1.index = pd.MultiIndex.from_tuples(list(zip(index_0,
                                                     df_mi_1.index)),
                                             names=['foo', 'bar'])

    print(df_mi_1)

    store_1 = pd.HDFStore('test_2.h5')
    store_1.append('frame_0', df_mi_1)

    store_1.close()

Теперь два кадра данных df_mi и df_mi_1 выглядят одинаково при печати. Однако store_1.append('frame_0', df_mi_1) возвращает следующую ошибку:

  File "C:\Users\test_df_to_hdf_2.py", line 65, in <module>
    store_1.append('frame_0', df_mi_1)
  File "C:\Program Files\Python37\lib\site-packages\pandas\io\pytables.py", line 1059, in append
    self._write_to_group(key, value, append=append, dropna=dropna, **kwargs)
  File "C:\Program Files\Python37\lib\site-packages\pandas\io\pytables.py", line 1525, in _write_to_group
    s.write(obj=value, append=append, complib=complib, **kwargs)
  File "C:\Program Files\Python37\lib\site-packages\pandas\io\pytables.py", line 4615, in write
    return super().write(obj=obj, data_columns=data_columns, **kwargs)
  File "C:\Program Files\Python37\lib\site-packages\pandas\io\pytables.py", line 4194, in write
    axes=axes, obj=obj, validate=append, min_itemsize=min_itemsize, **kwargs
  File "C:\Program Files\Python37\lib\site-packages\pandas\io\pytables.py", line 3888, in create_axes
    items=(",".join(pprint_thing(item) for item in items))
ValueError: cannot match existing table structure for [i,n,t,e,g,e,r] on appending data

Я использую Python 3.7.4 (64 бита) с Numpy 1.17.4 и Pandas 0.25.3 при Windows 10 Professional (64 бит).

Я пытался найти ответ, но ничего не нашел, и я как бы застрял в идеях о том, как его решить. Я действительно хотел бы иметь возможность использовать MultiIndex.from_tuples, потому что это удобно, и я уже реализовал его в своем основном скрипте. Большое спасибо

...