pandas相当于.rda / .rdata

时间:2018-06-03 03:59:16

标签: python python-3.x pandas

我有一个大约1000列的大型数据框。在完成所有缺失值处理并将数据类型更改为我想要的之后,我已经能够将此数据框的大小减少到几乎一半。我通过将大量的int64更改为int16并将对象更改为category来完成此操作。

在R中执行类似操作后,我可以将这个新数据帧保存为.rda格式,然后将其加载回来。这有助于我在完成所有操作后以我所拥有的格式直接获取所有变量。有没有办法可以将它保存在python中,然后重新加载这种特定的数据格式,以便维护数据类型?

P.S。 - 写入csv然后加载它会让我再做一些工作。

2 个答案:

答案 0 :(得分:1)

查看pickle模块,应该是您所需要的:

https://docs.python.org/3.5/library/pickle.html

答案 1 :(得分:1)

设置

df = pd.DataFrame(dict(A=[1, 2, 3], B=list('XYZ')))
df.A = df.A.astype(np.int16)
df.B = pd.Categorical(df.B)

df

   A  B
0  1  X
1  2  Y
2  3  Z
df.dtypes

A       int16
B    category
dtype: object

您可以使用pandas.DataFrame.to_hdf

保存到hdf
使用format='table',因为来自分类

的NotImplementedError
df.to_hdf('small.h5', 'this_df', format='table')

回读

df1 = pd.read_hdf('small.h5', 'this_df')

df1

   A  B
0  1  X
1  2  Y
2  3  Z

检查dtypes

df.dtypes

A       int16
B    category
dtype: object

检查等值

df1.equals(df)

True

使用feather

您可能需要安装羽毛格式

conda install feather-format -c conda-forge

pip install -U feather-format

然后

df.to_feather('small.feather')

df1 = pd.read_feather('small.feather')

df1.equals(df)

True

feather的优点是您还应该能够在 R 中阅读它们,并且阅读和写作应该非常快。

原油时间比较

%timeit pd.read_feather('small.feather')
%timeit pd.read_hdf('small.h5', 'this_df')

842 µs ± 11.1 µs per loop (mean ± std. dev. of 7 runs, 1000 loops each)
23.2 ms ± 479 µs per loop (mean ± std. dev. of 7 runs, 10 loops each)