Apakah ada cara untuk memilih baris acak dari DataFrame di Pandas.
Dalam R, menggunakan paket mobil, ada fungsi some(x, n)
yang berguna yang mirip dengan kepala tetapi memilih, dalam contoh ini, 10 baris secara acak dari x.
Saya juga telah melihat dokumentasi slicing dan sepertinya tidak ada yang setara.
Memperbarui
Sekarang menggunakan versi 20. Ada metode sampel.
df.sample(n)
df.sample(N, replace=True)
. Lebih detail di sini .Jawaban:
Sesuatu seperti ini?
Catatan: Pada Panda v0.20.0,
ix
telah usang dalam mendukungloc
untuk mengindeks berdasarkan label.sumber
df.ix[np.random.random_integers(0, len(df), 10)]
juga akan berhasil.df.ix[np.random.choice(df.index, 10)]
.np.random.choice
kecepatannya dua kali lebih cepatrandom.sample
Dengan versi panda
0.16.1
dan yang lebih tinggi, sekarang adaDataFrame.sample
metode bawaan :Untuk kedua pendekatan di atas, Anda bisa mendapatkan sisa baris dengan melakukan:
sumber
df_0.7
bukan nama yang valid. Selain itu, saya sarankan menggantidf_rest = df.loc[~df.index.isin(df_0_7.index)]
dengandf_rest = df.loc[df.index.difference(df_0_7.index)]
.difference()
?df_percent.index.get_indexer(df.index) == -1
jauh lebih efisien sebagai gantinya (tetapi juga lebih jelek) ...sample
Pada v0.20.0, Anda dapat menggunakan
pd.DataFrame.sample
, yang dapat digunakan untuk mengembalikan sampel acak dari baris nomor tetap, atau persentase baris:Untuk reproduktifitas, Anda dapat menentukan bilangan bulat
random_state
, setara dengan menggunakannp.ramdom.seed
. Jadi, alih-alih mengatur, misalnyanp.random.seed = 0
, Anda dapat:sumber
Cara terbaik untuk melakukan ini adalah dengan fungsi sampel dari modul acak,
sumber
Sebenarnya ini akan memberi Anda indeks berulang di
np.random.random_integers(0, len(df), N)
manaN
sejumlah besar.sumber
Baris di bawah ini akan secara acak memilih n jumlah baris dari total jumlah baris yang ada dari kerangka data df tanpa penggantian.
df=df.take(np.random.permutation(len(df))[:n])
sumber