Pilih baris Pandas berdasarkan indeks daftar

105

Saya memiliki dataframe df:

   20060930  10.103       NaN     10.103   7.981
   20061231  15.915       NaN     15.915  12.686
   20070331   3.196       NaN      3.196   2.710
   20070630   7.907       NaN      7.907   6.459

Kemudian saya ingin memilih baris dengan nomor urut tertentu yang ditunjukkan dalam daftar, misalkan di sini adalah [1,3], lalu kiri:

   20061231  15.915       NaN     15.915  12.686
   20070630   7.907       NaN      7.907   6.459

Bagaimana atau fungsi apa yang bisa melakukan itu?

pengguna2806761
sumber

Jawaban:

130
List = [1, 3]
df.ix[List]

harus melakukan triknya! Ketika saya mengindeks dengan bingkai data, saya selalu menggunakan metode .ix (). Jauh lebih mudah dan lebih fleksibel ...

UPDATE Ini bukan lagi metode yang diterima untuk pengindeksan. The ixMetode sudah ditinggalkan. Gunakan .ilocuntuk pengindeksan berbasis integer dan .locuntuk pengindeksan berbasis label.

Woody Pride
sumber
14
Ini sekarang sudah usang, .iloc harus digunakan untuk pengindeksan posisi
t_warsop
86

Anda juga bisa menggunakan iloc:

df.iloc[[1,3],:]

Ini tidak akan berfungsi jika indeks di dataframe Anda tidak sesuai dengan urutan baris karena perhitungan sebelumnya. Dalam kasus itu gunakan:

df.index.isin([1,3])

... seperti yang disarankan dalam tanggapan lain.

yemu
sumber
61

Cara lain (meskipun merupakan kode yang lebih panjang) tetapi lebih cepat dari kode-kode di atas. Periksa menggunakan fungsi% timeit:

df[df.index.isin([1,3])]

PS: Saudara tahu alasannya

masukkan deskripsi gambar di sini

Amruth Lakkavaram
sumber
1
digunakan df.index.get_level_values(0).isinuntuk multiindex
CiaranWelsh
4

Untuk kumpulan data yang besar, adalah efisien memori untuk membaca baris yang dipilih saja melalui skiprowsparameter.

Contoh

pred = lambda x: x not in [1, 3]
pd.read_csv("data.csv", skiprows=pred, index_col=0, names=...)

Ini sekarang akan mengembalikan DataFrame dari file yang melewati semua baris kecuali 1 dan 3.


Detail

Dari dokumen :

skiprows : list-like atau integer atau callable, default None

...

Jika dapat dipanggil, fungsi yang dapat dipanggil akan dievaluasi terhadap indeks baris, mengembalikan True jika baris harus dilewati dan False sebaliknya. Contoh argumen callable yang valid adalahlambda x: x in [0, 2]

Fitur ini berfungsi pada pandas versi 0.20.0+. Lihat juga masalah yang sesuai dan posting terkait .

pylang
sumber