Liste dizinine göre Pandas satırlarını seçin


107

Bir veri çerçevem ​​df var:

   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

Sonra, bir listede belirtilen belirli sıra numaralarına sahip satırları seçmek istiyorum, farz edin ki burada [1,3] ve sonra sol:

   20061231  15.915       NaN     15.915  12.686
   20070630   7.907       NaN      7.907   6.459

Bunu nasıl veya hangi işlev yapabilir?

Yanıtlar:


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

hile yapmalı! Veri çerçeveleriyle indekslediğimde her zaman .ix () yöntemini kullanırım. Çok daha kolay ve daha esnek ...

GÜNCELLEME Bu artık endeksleme için kabul edilen bir yöntem değildir. ixYöntem kaldırıldı. .ilocTamsayı bazlı indeksleme ve .locetiket bazlı indeksleme için kullanın .


15
Bu artık kullanımdan kaldırılmıştır, .iloc konum indeksleme için kullanılmalıdır
t_warsop

87

iloc'u da kullanabilirsiniz:

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

Veri çerçevenizdeki dizinler önceki hesaplamalar nedeniyle satırların sırasına karşılık gelmiyorsa bu işe yaramayacaktır. Bu durumda şunları kullanın:

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

... diğer yanıtlarda önerildiği gibi.


62

Başka bir yol (daha uzun bir kod olmasına rağmen) ancak yukarıdaki kodlardan daha hızlıdır. % Timeit işlevini kullanarak kontrol edin:

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

Not: Sebebini sen bul

görüntü açıklamasını buraya girin


1
kullanmak df.index.get_level_values(0).isinmultiindex için
CiaranWelsh

4

Büyük veri kümeleri için, skiprowsparametre aracılığıyla yalnızca seçilen satırları okumak bellek açısından verimlidir .

Misal

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

Bu, şimdi 1 ve 3 dışındaki tüm satırları atlayan bir dosyadan bir DataFrame döndürecektir.


Detaylar

Gönderen docs :

skiprows : liste benzeri veya tamsayı veya çağrılabilir, varsayılan None

...

Çağrılabilirse, çağrılabilir işlev satır indekslerine göre değerlendirilir ve satır atlanması gerekiyorsa True, aksi takdirde False döndürür. Geçerli bir çağrılabilir argüman örneği şöyle olacaktır:lambda x: x in [0, 2]

Bu özellik pandalar 0.20.0+ sürümünde çalışır. Ayrıca ilgili konuya ve ilgili bir gönderiye bakın .

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.