Есть ли способ выбрать случайные строки из DataFrame в Pandas.
В R, используя пакет car, есть полезная функция, some(x, n)
которая похожа на head, но выбирает, в этом примере, 10 строк случайным образом из x.
Я также посмотрел документацию по нарезке, и, похоже, нет ничего эквивалентного.
Обновить
Сейчас используется версия 20. Есть пример метода.
df.sample(n)
df.sample(N, replace=True)
. Подробнее здесь .Ответы:
Что-то вроде этого?
Примечание: На панде v0.20.0,
ix
устарели в пользуloc
индексации на основе меток.источник
df.ix[np.random.random_integers(0, len(df), 10)]
будет работать.df.ix[np.random.choice(df.index, 10)]
.np.random.choice
это в два раза быстрее, чемrandom.sample
С версией панд
0.16.1
и выше, теперь естьDataFrame.sample
встроенный метод :Для любого из указанных выше подходов вы можете получить остальные строки, выполнив:
источник
df_0.7
не является действительным именем Более того, я предлагаю заменитьdf_rest = df.loc[~df.index.isin(df_0_7.index)]
наdf_rest = df.loc[df.index.difference(df_0_7.index)]
.difference()
?df_percent.index.get_indexer(df.index) == -1
вместо этого намного более эффективный (но также и более уродливый) ...sample
Начиная с v0.20.0, вы можете использовать
pd.DataFrame.sample
, который может использоваться для возврата случайной выборки строк с фиксированным числом или процентного содержания строк:Для воспроизводимости вы можете указать целое число
random_state
, эквивалентное использованиюnp.ramdom.seed
. Таким образом, вместо установки, напримерnp.random.seed = 0
, вы можете:источник
Лучший способ сделать это с помощью функции выборки из случайного модуля,
источник
На самом деле это даст вам повторные индексы,
np.random.random_integers(0, len(df), N)
гдеN
большое количество.источник
Внизу строки случайным образом будет выбрано n чисел из всех существующих номеров строк из кадра данных df без замены.
df=df.take(np.random.permutation(len(df))[:n])
источник