web-dev-qa-db-fra.com

Sélectionnez Pandas _ lignes en fonction de l'index de la liste

J'ai une df de dataframe:

   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

Ensuite, je veux sélectionner les lignes avec certains numéros de séquence qui sont indiquées dans une liste, supposons qu'il s'agisse de [1,3], puis de gauche:

   20061231  15.915       NaN     15.915  12.686
   20070630   7.907       NaN      7.907   6.459

Comment ou quelle fonction peut faire ça?

79
user2806761
List = [1, 3]
df.ix[List]

devrait faire l'affaire! Lorsque j'indexe avec des trames de données, j'utilise toujours la méthode .ix (). C'est tellement plus facile et plus flexible ...

UPDATE Ce n'est plus la méthode acceptée pour l'indexation. La méthode ix est obsolète. Utilisez .iloc pour l'indexation basée sur un entier et .loc pour l'indexation par étiquette.

108
Woody Pride

vous pouvez aussi utiliser iloc:

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

Une autre façon (bien que ce soit un code plus long) mais plus rapide que les codes ci-dessus. Vérifiez-le en utilisant la fonction% timeit:

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

PS: Vous trouvez la raison

enter image description here

20
Amruth Lakkavaram

Pour les grands ensembles de données, l'utilisation de la mémoire pour lire uniquement les lignes sélectionnées via le paramètre skiprows est efficace.

Exemple

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

Cela va maintenant retourner un DataFrame à partir d'un fichier qui ignore toutes les lignes sauf 1 et 3.


Détails

De la docs :

skiprows: sous forme de liste, d'entier ou appelable, par défaut None

...

Si appelable, la fonction appelable sera évaluée par rapport aux index de ligne, renvoyant True si la ligne doit être ignorée et False sinon. Un exemple d'argument appelable valide serait lambda x: x in [0, 2]

Cette fonctionnalité fonctionne dans la version pandas 0.20.0+. Voir aussi le numéro correspondant et un article lié .

2
pylang