190 votes

Sélectionner les lignes Pandas en fonction de l'index de la liste

J'ai un 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

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

20061231  15.915       NaN     15.915  12.686
20070630   7.907       NaN      7.907   6.459

Comment ou quelle fonction peut faire cela ?

237voto

Woody Pride Points 1248

Utilisation .iloc pour l'indexation basée sur les nombres entiers et .loc pour l'indexation basée sur les étiquettes. Voir l'exemple ci-dessous :

ind_list = [1, 3]
df.iloc[ind_list]

149voto

yemu Points 1054

Vous pouvez également utiliser iloc :

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

Cela ne fonctionnera pas si les index de votre cadre de données ne correspondent pas à l'ordre des lignes en raison de calculs antérieurs. Dans ce cas, utilisez :

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

... comme suggéré dans d'autres réponses.

115voto

Amruth Lakkavaram Points 417

Une autre méthode (bien qu'il s'agisse d'un code plus long) mais plus rapide que les codes ci-dessus. Vérifiez-le à l'aide de la fonction %timeit :

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

PS : Vous avez trouvé la raison

enter image description here

25voto

user42 Points 166

Si index_list contient les indices souhaités, vous pouvez obtenir le dataframe avec les lignes souhaitées en faisant

index_list = [1,2,3,4,5,6]
df.loc[df.index[index_list]]

Ces données sont basées sur les dernières la documentation à partir de mars 2021.

6voto

pylang Points 12013

Pour les grands ensembles de données, il est plus efficace en termes de mémoire de ne lire que les lignes sélectionnées via la fonction skiprows paramètre.

Exemple

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

Cette opération renvoie un DataFrame à partir d'un fichier qui ignore toutes les lignes à l'exception des lignes 1 et 3.


Détails

A partir de la documents :

skiprows : de type liste ou entier ou appelable, par défaut None

...

Si elle est appelable, la fonction appelable sera évaluée en fonction des indices de ligne, renvoyant True si la ligne doit être sautée et False dans le cas contraire. 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 la page question correspondante et un poste connexe .

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X