Если у вас есть пространство, чтобы добавить еще один столбец, можно добавить один со случайным значением, которое вы могли бы затем фильтровать на для тестирования. Здесь я использовал форму между 0 и 1, но вы могли бы использовать что угодно, если бы хотели другую пропорцию.
df = pd.DataFrame({'one':[1,2,3,4,5,4,3,2,1], 'two':[6,7,8,9,10,9,8,7,6], 'three':[11,12,13,14,15,14,13,12,11]})
df['split'] = np.random.randint(0, 2, size=len(df))
Конечно, это требует от вас есть место, чтобы добавить совершенно новый столбец - особенно, если ваши данные очень долго, может быть, вы не знаете.
Другой вариант будет работать, например, если ваши данные были в формате csv, и вы знали количество строк. Выполните аналогичные приведенным выше, с randomint
, но передать этот список в skiprows
аргумент панд read_csv()
:
num_rows = 100000
all = range(num_rows)
some = np.random.choice(all, replace=False, size=num_rows/2)
some.sort()
trainer_df = pd.read_csv(path, skiprows=some)
rest = [i for i in all if i not in some]
rest.sort()
df = pd.read_csv(path, skiprows=rest)
Это немного неуклюжим вперед, особенно с петлей в списке понимания и создания этих списков в памяти является неудачным, но он все равно должен быть лучше памяти, чем просто создание всей копии половины данных.
Чтобы сделать его еще более дружественным к памяти, вы можете загрузить подмножество тренера, подготовить модель, а затем переписать учебный информационный кадр с остальными данными, а затем применить модель. Вы столкнетесь с ногами some
и rest
, но вам никогда не придется загружать обе половинки данных одновременно.
Насколько я знаю, в момент выполнения задания панда создает копию. Будет ли это работать, если вы просто сохраните показатели поезда и теста? – ayhan
Не отвечая на вопрос, но, возможно, другие релевантные идеи: - Разве вы не можете разбить набор данных уже при загрузке? - Или использовать что-то вроде 'dask' (http://dask.pydata.org/en/latest/)? –
Единственное, что я знаю, это загрузить их из таблицы HDF5 отдельно и выполнить разделение во время загрузки, т. Е. Загрузить некоторые строки сначала в качестве тренировки, а затем остальное как разделить - может обеспечить правильный ответ - это звучит правдоподобно ... – RexFuzzle