我有一个大约1000列的大型数据框。在完成所有缺失值处理并将数据类型更改为我想要的之后,我已经能够将此数据框的大小减少到几乎一半。我通过将大量的int64更改为int16并将对象更改为category来完成此操作。
在R中执行类似操作后,我可以将这个新数据帧保存为.rda格式,然后将其加载回来。这有助于我在完成所有操作后以我所拥有的格式直接获取所有变量。有没有办法可以将它保存在python中,然后重新加载这种特定的数据格式,以便维护数据类型?
P.S。 - 写入csv然后加载它会让我再做一些工作。
答案 0 :(得分:1)
查看pickle模块,应该是您所需要的:
答案 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'
,因为来自分类
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)