Czy istnieje sposób na wybranie losowych wierszy z DataFrame w Pandas.
W R, korzystając z pakietu samochodowego, jest przydatna funkcja, some(x, n)
która jest podobna do head, ale w tym przykładzie wybiera losowo 10 wierszy z x.
Przejrzałem również dokumentację dotyczącą wycinania i wydaje się, że nie ma nic równoważnego.
Aktualizacja
Teraz korzystam z wersji 20. Istnieje przykładowa metoda.
df.sample(n)
df.sample(N, replace=True)
. Więcej szczegółów tutaj .Odpowiedzi:
Coś takiego?
Uwaga: od wersji 0.20.0 Pandas
ix
został wycofany na korzyśćloc
indeksowania na podstawie etykiet.źródło
df.ix[np.random.random_integers(0, len(df), 10)]
to też zadziała.df.ix[np.random.choice(df.index, 10)]
.np.random.choice
jest dwa razy szybszy niżrandom.sample
W przypadku wersji pandy
0.16.1
i nowszych jest terazDataFrame.sample
wbudowana metoda :W przypadku obu powyższych metod pozostałe wiersze można uzyskać, wykonując:
źródło
df_0.7
nie jest prawidłową nazwą. Ponadto, proponuję zastąpieniedf_rest = df.loc[~df.index.isin(df_0_7.index)]
zdf_rest = df.loc[df.index.difference(df_0_7.index)]
.difference()
?df_percent.index.get_indexer(df.index) == -1
jest o wiele bardziej wydajny (ale też brzydszy) ...sample
Od wersji 0. 20.0 można użyć
pd.DataFrame.sample
, który może służyć do zwracania losowej próbki o stałej liczbie wierszy lub odsetku wierszy:Aby
random_state
zapewnić odtwarzalność, możesz określić liczbę całkowitą , równoważną użyciunp.ramdom.seed
. Tak więc zamiast ustawianianp.random.seed = 0
, możesz na przykład :źródło
Najlepszym sposobem na to jest użycie funkcji próbki z modułu random,
źródło
Właściwie to da ci powtarzające się indeksy,
np.random.random_integers(0, len(df), N)
gdzieN
jest duża liczba.źródło
Poniższy wiersz losowo wybierze n liczbę wierszy spośród wszystkich istniejących numerów wierszy z ramki danych df bez zastępowania.
df=df.take(np.random.permutation(len(df))[:n])
źródło