Python 熊猫:保存到csv时的内存差异(数据帧与多索引系列)

Python 熊猫:保存到csv时的内存差异(数据帧与多索引系列),python,csv,pandas,export-to-csv,multi-index,Python,Csv,Pandas,Export To Csv,Multi Index,Pandasto_csv根据文件是多索引系列还是简单的未堆叠数据帧(后者似乎小于一半大小),写入大小非常不同的文件 从csv格式来看,这背后可能有某种直觉,但我不能完全理解 为什么熊猫系列的.csv格式要大得多,以致于数据帧? 生成此示例的代码: # imports import pandas as pd from numpy.random import random from random import randint # generate some data (1000 x 100

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

从csv格式来看,这背后可能有某种直觉,但我不能完全理解

为什么熊猫系列的.csv格式要大得多,以致于数据帧?

生成此示例的代码:

# 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

其中在
未堆叠的
示例中,您仅打印出每个索引和每个列一次。在
stacked
示例中,每个索引打印1000次,每个列值打印1000次

未堆叠的

堆叠

这就是为什么我们发明了桌子。。。因为它通常更方便、更高效

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

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

2000000