Pandas:保存为 csv 时的内存差异(Dataframe 与多索引系列)

Pandas: Memory difference when saving to csv (Dataframe vs multi-index Series)

Pandas to_csv 写入大小非常不同的文件,具体取决于它们是多索引系列还是简单的未堆叠数据帧(后者似乎小于一半大小)。

csv 格式背后可能有一些直觉,但我不太明白。

为什么 pandas 系列在 .csv 格式上比 Dataframes 大得多?

生成此示例的代码:

# imports 
import pandas as pd 
from numpy.random import random 
from random import randint 

# generate some data (1000 x 1000)
n_rows = 1000
n_cols = 1000
large = pd.DataFrame(np.random.random((n_rows, n_cols)))

# generate some indexes
large['index_1'] = [randint(0,100) for i in range(n_rows)]
large['index_2'] = [random() for i in range(n_rows)]

# make it a multi-index 
large = large.set_index(['index_1', 'index_2']).sort_index()

# save as stacked and unstacked
large.to_csv('unstacked_example.csv')
large.stack().reset_index().to_csv('stacked_example.csv')

然后用ls -lh得到尺寸:
unstacked_example.csv - 19M stacked_example.csv - 50M

unstacked 示例中,您只打印了每个索引和每个列一次。在 stacked 示例中,您打印了每个索引 1000 次,每个列值打印了 1000 次。

未堆叠

large.size + large.index.size + large.columns.size

1002000

堆叠

slarge = large.stack()
slarge.size + slarge.index.size

2000000

这就是我们发明表格的原因...因为它通常更方便、更高效。