Pandas fillna ne fonctionne pas sur les tranches DataFrame, voici un exemple
df.fillna(0, inplace=True)
le DataFrame ne change pas p >
df["A"].fillna(0, inplace=True)
en revanche
A B C D 0 NaN 2.0 NaN 0 1 3.0 4.0 NaN 1 2 NaN NaN NaN 5 3 NaN 3.0 NaN 4
et
df = pd.DataFrame([[np.nan, 2, np.nan, 0],
[3, 4, np.nan, 1],
[np.nan, np.nan, np.nan, 5],
[np.nan, 3, np.nan, 4]],
columns=list('ABCD'))
df[["A", 'B']].fillna(0, inplace=True)
fonctionnent bien.
Est-ce un bug ou fonctionne-t-il comme prévu? Merci d'avance.
P.S. cette question demande comment faire utilisez fillna sur une tranche, quant à ma question, elle concerne pourquoi ce qui précède ne fonctionne pas.
La réponse se trouve dans la section des commentaires @ heena-bawa answers.
3 Réponses :
Si nous regardons le documentation pandas il dit que vous devez utiliser ce qui suit pour fillna sur les tranches:
values = {'A':0, 'B':0}
df.fillna(value=values, inplace=True)
print(df)
A B C D
0 0.0 2.0 NaN 0
1 3.0 4.0 NaN 1
2 0.0 0.0 NaN 5
3 0.0 3.0 NaN 4
merci d'avoir répondu, mais je pense que donner un dict / Series ou DF est pour "spécifier la valeur à utiliser pour chaque index" et df [["A" , 'B']] est un DataFrame parfaitement parfait. Votre méthode est une bonne solution de contournement, mais encore une fois ma question était "Est-ce un bogue ou fonctionne-t-il comme prévu?".
Vous pouvez utiliser:
df[['A','B']] = df[['A','B']].fillna(0)
A B C D
0 0.0 2.0 NaN 0
1 3.0 4.0 NaN 1
2 0.0 0.0 NaN 5
3 0.0 3.0 NaN 4
Le but de inplace = True n'est-il pas d'éviter l'utilisation de l'opérateur d'affectation?
inplace = True pour une tranche d'un dataframe ne fonctionnera pas. Il fonctionne sur une base de données complète. Vous devez uniquement mettre à jour la tranche.
Pour plus d'informations, vous pouvez consulter: pandas.pydata.org/pandas- docs / stable / user_guide / indexing.htm l
Je pense que cela fonctionne comme prévu. Si j'essaie votre code, cela lance un avertissement:
SettingWithCopyWarning: A value is trying to be set on a copy of a slice from a DataFrame See the caveats in the documentation: http://pandas.pydata.org/pandas-docs/stable/indexing.html#indexing-view-versus-copy downcast=downcast, **kwargs)
Signification: En sélectionnant les colonnes de cette manière, vous générez une copie et donc le paramètre en place ne peut pas avoir d'effet. p>