Подтвердить что ты не робот

Как я могу эффективно сохранить фреймворк python pandas в hdf5 и открыть его в качестве кадра данных в R?

Я думаю, что название затрагивает этот вопрос, но для выяснения:

pandas Пакет python имеет тип данных DataFrame для хранения данных таблицы в python. Он также имеет удобный интерфейс для формата hdf5, поэтому pandas DataFrames (и другие данные) можно сохранить с помощью простого dict (при условии, что у вас установлен pytables)

import pandas 
import numpy
d = pandas.HDFStore('data.h5')
d['testdata'] = pandas.DataFrame({'N': numpy.random.randn(5)})
d.close()

Пока все хорошо. Однако, если я попытаюсь загрузить тот же hdf5 в R, я вижу, что все не так просто:

> library(hdf5)
> hdf5load('data.h5')
NULL
> testdata
$block0_values
         [,1]      [,2]      [,3]       [,4]      [,5]
[1,] 1.498147 0.8843877 -1.081656 0.08717049 -1.302641
attr(,"CLASS")
[1] "ARRAY"
attr(,"VERSION")
[1] "2.3"
attr(,"TITLE")
[1] ""
attr(,"FLAVOR")
[1] "numpy"

$block0_items
[1] "N"
attr(,"CLASS")
[1] "ARRAY"
attr(,"VERSION")
[1] "2.3"
attr(,"TITLE")
[1] ""
attr(,"FLAVOR")
[1] "numpy"
attr(,"kind")
[1] "string"
attr(,"name")
[1] "N."

$axis1
[1] 0 1 2 3 4
attr(,"CLASS")
[1] "ARRAY"
attr(,"VERSION")
[1] "2.3"
attr(,"TITLE")
[1] ""
attr(,"FLAVOR")
[1] "numpy"
attr(,"kind")
[1] "integer"
attr(,"name")
[1] "N."

$axis0
[1] "N"
attr(,"CLASS")
[1] "ARRAY"
attr(,"VERSION")
[1] "2.3"
attr(,"TITLE")
[1] ""
attr(,"FLAVOR")
[1] "numpy"
attr(,"kind")
[1] "string"
attr(,"name")
[1] "N."

attr(,"TITLE")
[1] ""
attr(,"CLASS")
[1] "GROUP"
attr(,"VERSION")
[1] "1.0"
attr(,"ndim")
[1] 2
attr(,"axis0_variety")
[1] "regular"
attr(,"axis1_variety")
[1] "regular"
attr(,"nblocks")
[1] 1
attr(,"block0_items_variety")
[1] "regular"
attr(,"pandas_type")
[1] "frame"

Это подводит меня к моему вопросу: в идеале я смог бы сохранить назад и вперед от R до pandas. Я, очевидно, могу написать оболочку из pandas в R (я думаю... хотя я думаю, что если я использую pandas MultiIndex, который может становится сложнее), но я не думаю, что могу легко использовать эти данные в pandas. Любые предложения?

Бонус: я действительно хочу использовать пакет data.table в R с фреймворком pandas (подходом для подбора является подозрительно подобный в обоих пакетах). Любая помощь по этому поводу очень ценится.

4b9b3361

Ответ 2

Было бы целесообразно выпадающее меню на pytables и хранить/получать ваши данные.

В конечном итоге DataFrame является типом серии, что является таблицей HDF5. Существуют ограничения на перевод из-за несовместимых типов, но для числовых данных он должен быть прямым.

Путь pandas сохраняет свой HDF5, который больше похож на двоичный blob. Он должен поддерживать все нюансы DataFrame, которые HDF5 действительно поддерживает.

https://github.com/dalejung/trtools/blob/master/trtools/io/pytables.py

Имеет какой-то код pandas/hdf5.

Ответ 4

Я рекомендую использовать feather, созданный Уэсом и Хэдли, для решения проблемы передачи данных между R и Python эффективно.

Python

import numpy as np
import pandas as pd
import feather as ft

df = pd.DataFrame({'N': np.random.randn(5)})
ft.write_dataframe(df, 'df.feather')

R

library(data.table)
library(feather)

dt <- data.table(read_feather("df.feather"))
dt
           N
1: 0.2777700
2: 1.4083377
3: 1.2940691
4: 0.8221348
5: 1.8552908

Ответ 5

Вы можете использовать файлы csv в качестве общего формата данных. И R, и python pandas могут легко работать с этим. Вы можете потерять некоторую точность, но если это проблема, зависит от вашей конкретной проблемы.