Широкий и длинный формат при сохранении данных в pandas hdf5
Кадр данных pandas обычно представлен в длинном (много строк) или широком (много столбцов) формате.
Мне интересно, какой формат быстрее для чтения и занимает меньше памяти при сохранении в виде файла hdf (df.to_hdf
).
Существует ли общее правило или в некоторых случаях, когда один из форматов должен быть предпочтительным?
1 ответ
Длинный формат IMO гораздо предпочтительнее, так как у вас будет намного меньше накладных расходов метаданных (информация об именах столбцов, dtypes и т. Д.).
С точки зрения использования памяти они будут более или менее одинаковыми:
In [22]: long = pd.DataFrame(np.random.randint(0, 10**6, (10**4, 4)))
In [23]: wide = pd.DataFrame(np.random.randint(0, 10**6, (4, 10**4)))
In [24]: long.shape
Out[24]: (10000, 4)
In [25]: wide.shape
Out[25]: (4, 10000)
In [26]: sys.getsizeof(long)
Out[26]: 160104
In [27]: sys.getsizeof(wide)
Out[27]: 160104
In [28]: wide.info()
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 4 entries, 0 to 3
Columns: 10000 entries, 0 to 9999
dtypes: int32(10000)
memory usage: 156.3 KB
In [29]: long.info()
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 10000 entries, 0 to 9999
Data columns (total 4 columns):
0 10000 non-null int32
1 10000 non-null int32
2 10000 non-null int32
3 10000 non-null int32
dtypes: int32(4)
memory usage: 156.3 KB