У меня есть блок данных 2Gb, который один раз записывает, читает много df. Я хотел бы использовать df в pandas, поэтому я использовал df.read_hdf
и df.to_hdf
в фиксированном формате, который отлично работает при чтении и записи.Быстрое чтение указанных столбцов в df с использованием pandas.to_hdf
Однако df растет с добавлением большего количества столбцов, поэтому вместо этого я хотел бы использовать формат таблицы, поэтому я могу выбрать столбцы, которые мне нужны при чтении данных. Я думал, что это даст мне преимущество в скорости, но от тестирования это, похоже, не так.
Этот пример:
import numpy as np
import pandas as pd
df = pd.DataFrame(np.random.randn(10000000,9),columns=list('ABCDEFGHI'))
%time df.to_hdf("temp.h5", "temp", format ="fixed", mode="w")
%time df.to_hdf("temp2.h5", "temp2", format="table", mode="w")
показывает фиксированный формат немного быстрее (6.8s против 5,9 секунды на моей машине).
Затем чтение данных (после небольшого перерыва, чтобы убедиться, что файл был полностью сохранен):
%time x = pd.read_hdf("temp.h5", "temp")
%time y = pd.read_hdf("temp2.h5", "temp2")
%time z = pd.read_hdf("temp2.h5", "temp2", columns=list("ABC"))
Урожайность:
Wall time: 420 ms (fixed)
Wall time: 557 ms (format)
Wall time: 671 ms (format, specified columns)
Я понимаю, фиксированный формат быстрее чтение данных, но почему значение df с указанными столбцами медленнее, чем чтение полного фрейма данных? В чем преимущество использования форматирования таблиц (с указанными столбцами или без них) по фиксированному форматированию?
Возможно ли преимущество памяти при увеличении df?
Спасибо.Не могли бы вы рассказать о том, как сохранить транспонированные данные? Означает ли это, что я должен сохранять столбцы с отдельными ключами, но в том же файле hdf? Не могли бы вы привести пример? – user6538642
@ user6538642, что такое «обычный» ок. Форма DF? – MaxU
Форма = (6 млн. * 50), количество столбцов, расширяющихся до нескольких сотен. Индекс - это мультииндекс (дата (в формате даты и времени) и имя) – user6538642