我认为标题涵盖了这个问题,但要澄清:
pandas python包有一个DataFrame数据类型,用于在python中保存表数据。它还具有hdf5文件格式的便捷界面,因此可以使用简单的类似dict的界面保存pandas DataFrames(和其他数据)(假设您已安装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来回保存到熊猫。我显然可以写一个从熊猫到R的包装器(我想......虽然我认为如果我使用可能变得更加棘手的pandas MultiIndex),但我认为我不能轻易地将这些数据用于大熊猫。有什么建议吗?
奖励:我真正想要做的是使用R中的data.table包和一个pandas数据帧(两种包中的键控方法都非常相似)。对那个人的任何帮助都非常感激。
答案 0 :(得分:8)
如果您仍在查看此内容,请查看Google群组中的这篇文章。它显示了如何通过HDF5在pandas / R之间交换数据。
https://groups.google.com/forum/?fromgroups#!topic/pydata/0LR72GN9p6w
答案 1 :(得分:3)
下拉到pytables并存储/获取数据是有意义的。
最终,DataFrame是系列的一个词典,就像HDF5表一样。由于不兼容的dtypes,翻译存在限制,但对于数值数据,它应该是直截了当的。
pandas存储其HDF5的方式更像是二进制blob。它必须支持HDF5干净支持的DataFrame的所有细微差别。
https://github.com/dalejung/trtools/blob/master/trtools/io/pytables.py
有一些pandas / hdf5代码。
答案 2 :(得分:2)
如何在HDF5中编写数据帧,以便可以在R中读取它现在在Pandas文档中: http://pandas-docs.github.io/pandas-docs-travis/io.html#external-compatibility
答案 3 :(得分:2)
我建议使用由Wes和Hadley构建的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
答案 4 :(得分:-1)
您可以使用csv
个文件作为通用数据格式。 R和python pandas都可以很容易地使用它。您可能会失去一些精确度,但如果这是一个问题取决于您的具体问题。