Сохранение и загрузка мультидексированного кадра данных Pandas и сохранение структуры столбца - PullRequest
0 голосов
/ 31 августа 2018

Я не могу найти способ правильно сохранить и правильно извлечь мультииндексированный фрейм данных pandas, чтобы сохранить структуру мультииндексированных столбцов. Для воспроизводимого примера:

enter image description here

toy_data.to_json()
'{"["GOOG","Shares"]":{"1521849600000":null,"1521936000000":null,"1522368000000":null,"1522454400000":694548763.0,"1522540800000":null},"["GOOG","ROE"]":{"1521849600000":null,"1521936000000":null,"1522368000000":null,"1522454400000":0.1076,"1522540800000":null},"["FB","Shares"]":{"1521849600000":null,"1521936000000":null,"1522368000000":null,"1522454400000":2398606201.0,"1522540800000":null},"["FB","ROE"]":{"1521849600000":null,"1521936000000":null,"1522368000000":null,"1522454400000":0.2465,"1522540800000":null}}'

toy_data.to_csv('toy_data.csv')

toy_data1 = pd.read_csv('toy_data.csv')

enter image description here

Ответы [ 2 ]

0 голосов
/ 31 августа 2018

read_csv

Использование аргументов header и index_col в read_csv даст вам то, что вам нужно.

toy_data.to_csv('sample.csv')
pd.read_csv('sample.csv', header=[0, 1], index_col=[0])

Company       GOOG          FB     
Indicators  Shares  ROE Shares  ROE
Quarter_end                        
2018-03-24     NaN  NaN    NaN  NaN
2018-03-25     NaN  NaN    NaN  NaN
2018-03-30     NaN  NaN    NaN  NaN
2018-03-31     1.0  2.0    3.0  4.0
2018-04-01     NaN  NaN    NaN  NaN

read_hdf

Возможно, лучше сохранить hdf.

toy_data.to_hdf('sample.h5', 'toy_key')
pd.read_hdf('sample.h5', 'toy_key')

Company       GOOG          FB     
Indicators  Shares  ROE Shares  ROE
Quarter_end                        
2018-03-24     NaN  NaN    NaN  NaN
2018-03-25     NaN  NaN    NaN  NaN
2018-03-30     NaN  NaN    NaN  NaN
2018-03-31     1.0  2.0    3.0  4.0
2018-04-01     NaN  NaN    NaN  NaN

Настройка

cols = pd.MultiIndex.from_product(
    [['GOOG', 'FB'], ['Shares', 'ROE']],
    names=['Company', 'Indicators']
)
idx = pd.to_datetime(
    ['2018-03-24', '2018-03-25', '2018-03-30',
     '2018-03-31', '2018-04-01']
).rename('Quarter_end')

toy_data = pd.DataFrame([
    [np.nan, np.nan, np.nan, np.nan],
    [np.nan, np.nan, np.nan, np.nan],
    [np.nan, np.nan, np.nan, np.nan],
    [1, 2, 3, 4],
    [np.nan, np.nan, np.nan, np.nan],
], idx, cols)
0 голосов
/ 31 августа 2018

Вы не предоставили пригодные примеры данных, но я вполне уверен, что все, что вам нужно сделать, это передать header=[0, 1] и index_col=0 в качестве аргументов read_csv.

...