J'ai une trame de données comme ci-dessous
itm Date Amount
67 420 2012-09-30 00:00:00 65211
68 421 2012-09-09 00:00:00 29424
69 421 2012-09-16 00:00:00 29877
70 421 2012-09-23 00:00:00 30990
71 421 2012-09-30 00:00:00 61303
72 485 2012-09-09 00:00:00 71781
73 485 2012-09-16 00:00:00 NaN
74 485 2012-09-23 00:00:00 11072
75 485 2012-09-30 00:00:00 113702
76 489 2012-09-09 00:00:00 64731
77 489 2012-09-16 00:00:00 NaN
lorsque j'essaie d'appliquer une fonction à la colonne Montant, j'obtiens l'erreur suivante.
ValueError: cannot convert float NaN to integer
J'ai essayé d'appliquer une fonction en utilisant .isnan du module mathématique J'ai essayé l'attribut pandas .replace J'ai essayé l'attribut de données .sparse de pandas 0.9 J'ai également essayé si l'instruction NaN == NaN dans une fonction. J'ai également consulté cet article Comment remplacer les valeurs NA par des zéros dans une trame de données R? tout en regardant d'autres articles. Toutes les méthodes que j'ai essayées n'ont pas fonctionné ou ne reconnaissent pas NaN. Tous les conseils ou solutions seraient appréciés.
Réponses:
Je crois
DataFrame.fillna()
que cela fera pour vous.Lien vers Docs pour une trame de données et pour une série .
Exemple:
Pour remplir les NaN dans une seule colonne, sélectionnez uniquement cette colonne. dans ce cas, j'utilise inplace = True pour réellement changer le contenu de df.
ÉDITER:
Pour éviter cela
SettingWithCopyWarning
, utilisez la fonctionnalité spécifique aux colonnes intégrée:la source
df[1]
s'agit d'une vue plutôt que d'une copie du DF d'origine? De toute évidence, s'il y a une situation rare où il s'agit d'une copie, cela provoquerait un bogue super gênant. Y a-t-il une déclaration claire à ce sujet dans la documentation des pandas?Il n'est pas garanti que le découpage renvoie une vue ou une copie. Tu peux faire
la source
Vous pouvez utiliser
replace
pour passerNaN
à0
:la source
NaN
? ou il remplacera également la valeur oùNA
ouNaN
commedf.fillna(0)
? Je cherche une solution qui ne remplace que la valeur là où il y en aNaN
et nonNA
NaN
valeurs ie, oùnp.isnan
est TrueJe voulais juste fournir un peu de mise à jour / cas spécial car il semble que les gens viennent toujours ici. Si vous utilisez un multi-index ou utilisez un index-slicer, l'option inplace = True peut ne pas être suffisante pour mettre à jour la tranche que vous avez choisie. Par exemple, dans un multi-index de niveau 2x2, cela ne changera aucune valeur (à partir de pandas 0.15):
Le "problème" est que le chaînage rompt la capacité fillna de mettre à jour la trame de données d'origine. J'ai mis "problème" entre guillemets car il y a de bonnes raisons pour les décisions de conception qui ont conduit à ne pas interpréter à travers ces chaînes dans certaines situations. En outre, c'est un exemple complexe (bien que j'y ai vraiment rencontré), mais la même chose peut s'appliquer à moins de niveaux d'index selon la façon dont vous découpez.
La solution est DataFrame.update:
C'est une ligne, se lit raisonnablement bien (en quelque sorte) et élimine tout problème inutile avec des variables ou des boucles intermédiaires tout en vous permettant d'appliquer fillna à n'importe quelle tranche à plusieurs niveaux que vous aimez!
Si quelqu'un peut trouver des endroits où cela ne fonctionne pas, veuillez poster dans les commentaires, je l'ai dérangé et j'ai regardé la source et cela semble résoudre au moins mes problèmes de tranche multi-index.
la source
Le code ci-dessous a fonctionné pour moi.
la source
Un moyen facile de remplir les valeurs manquantes: -
remplissage des colonnes de chaînes: lorsque les colonnes de chaînes ont des valeurs manquantes et des valeurs NaN.
remplissage des colonnes numériques: lorsque les colonnes numériques ont des valeurs manquantes et des valeurs NaN.
remplir NaN avec zéro:
la source
Vous pouvez également utiliser des dictionnaires pour remplir les valeurs NaN des colonnes spécifiques dans le DataFrame plutôt que de remplir tous les DF avec un oneValue.
la source
Considérant que la colonne particulière
Amount
dans le tableau ci-dessus est de type entier. Voici une solution:De même, vous pouvez le remplir avec différents types de données comme
float
,str
etc.En particulier, je considérerais le type de données pour comparer différentes valeurs de la même colonne.
la source
Pour remplacer les valeurs na dans les pandas
si
inplace = False
, au lieu de mettre à jour le df (dataframe), il retournera les valeurs modifiées.la source
Si vous deviez le convertir en une trame de données pandas, vous pouvez également le faire en utilisant
fillna
.Cela renverra les éléments suivants:
la source
Il existe principalement deux options; en cas d'imputation ou de remplissage de valeurs manquantes NaN / np.nan avec seulement des remplacements numériques (sur la ou les colonnes):
df['Amount'].fillna(value=None, method= ,axis=1,)
est suffisant:De la documentation:
valeur: scalaire, dict, série ou DataFrame Valeur à utiliser pour remplir les trous (par exemple 0), alternativement un dict / Series / DataFrame de valeurs spécifiant la valeur à utiliser pour chaque index (pour une série) ou colonne (pour un DataFrame) . (les valeurs ne figurant pas dans le dict / Series / DataFrame ne seront pas remplies). Cette valeur ne peut pas être une liste.
Ce qui signifie que les «chaînes» ou les «constantes» ne peuvent plus être imputées.
Pour des imputations plus spécialisées, utilisez SimpleImputer () :
la source
Pour remplacer nan dans différentes colonnes de différentes manières:
la source