2017-02-12 24 views
2

Pandas to_csv записывает файлы с очень разными размерами в зависимости от того, являются ли они многоиндексными рядами или простыми нерастянутыми кадрами данных (последние кажутся меньше половины размер).Pandas: разность памяти при сохранении в csv (Dataframe vs multi-index Series)

Возможно, что-то похожее на это из формата 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 - 19М stacked_example.csv - 50М

ответ

1

Где в unstacked например, вы только распечатываете каждый индекс и каждый столбец один раз. В примере stacked вы печатали каждый индекс 1000 раз и каждое значение столбцов 1000 раз.

штабеля

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

1002000 

сложены

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

2000000 

Вот почему мы изобрели столы ... потому что часто бывает более удобным и эффективным.

 Смежные вопросы

  • Нет связанных вопросов^_^