web-dev-qa-db-fra.com

Pandas découpant FutureWarning avec 0.21.0

J'essaie de sélectionner un sous-ensemble d'un sous-ensemble d'une trame de données, en sélectionnant uniquement certaines colonnes et en filtrant les lignes.

df.loc[df.a.isin(['Apple', 'Pear', 'Mango']), ['a', 'b', 'f', 'g']]

Cependant, je reçois l'erreur:

Passing list-likes to .loc or [] with any missing label will raise
KeyError in the future, you can use .reindex() as an alternative.

Quelle est la bonne façon de couper et filtrer maintenant?

27
QuinRiva

Ceci est un changement introduit dans v0.21.1, et a été expliqué dans le docs longuement -

Auparavant, la sélection avec une liste d'étiquettes, lorsqu'une ou plusieurs étiquettes étaient manquantes, réussissait toujours, renvoyant NaN pour les étiquettes manquantes. Cela montrera maintenant un FutureWarning. À l'avenir, cela générera un KeyError ( GH15747 ). Cet avertissement déclenchera un DataFrame ou un Series pour utiliser .loc[] ou [[]] lors de la transmission d'une liste d'étiquettes avec au moins une étiquette manquante.

Par exemple,

df

     A    B  C
0  7.0  NaN  8
1  3.0  3.0  5
2  8.0  1.0  7
3  NaN  0.0  3
4  8.0  2.0  7

Essayez de découper ce que vous faites -

df.loc[df.A.gt(6), ['A', 'C']]

     A  C
0  7.0  8
2  8.0  7
4  8.0  7

Aucun problème. Maintenant, essayez de remplacer C par un libellé de colonne inexistant -

df.loc[df.A.gt(6), ['A', 'D']]
FutureWarning: Passing list-likes to .loc or [] with any missing label will raise
KeyError in the future, you can use .reindex() as an alternative.

     A   D
0  7.0 NaN
2  8.0 NaN
4  8.0 NaN

Donc, dans votre cas, l'erreur est due aux étiquettes de colonne que vous passez à loc. Jetez un autre regard sur eux.

27
cs95

Cette erreur se produit également avec .append appel lorsque la liste contient de nouvelles colonnes. Pour éviter cela

Utilisation:

df=df.append(pd.Series({'A':i,'M':j}), ignore_index=True)

Au lieu de,

df=df.append([{'A':i,'M':j}], ignore_index=True)

Message d'erreur complet:

C:\ProgramData\Anaconda3\lib\site-packages\pandas\core\indexing.py: 1472: FutureWarning: le fait de transmettre des éléments de liste à .loc ou si une étiquette manquante déclenche KeyError à l'avenir, vous pouvez utiliser .reindex ( ) comme alternative.

Merci à https://stackoverflow.com/a/50230080/207661

1
Shital Shah