quel est le moyen le plus rapide / le plus simple de supprimer des valeurs nan et inf / -inf d'un DataFrame pandas sans réinitialiser mode.use_inf_as_null
? J'aimerais pouvoir utiliser les arguments subset
et how
de dropna
, sauf avec des inf
valeurs considérées comme manquantes, comme:
df.dropna(subset=["col1", "col2"], how="all", with_inf=True)
Est-ce possible? Existe-t-il un moyen de dire dropna
d'inclure inf
dans sa définition des valeurs manquantes?
inf
valeurs à un prédéfiniint
comme0
, dans une certaine colonne?.replace(..., 0)
. Pour faire juste sur les colonnes, vous mettez à jour ces colonnes, c'estdf[cols] = df[cols].replace(..., 0)
replace
cela ne fonctionne pas sur place, donc une nouvelleDataFrame
est retournéeAvec le contexte d'option, cela est possible sans réglage permanent
use_inf_as_na
. Par exemple:Bien sûr, il peut être configuré pour traiter de
inf
manièreNaN
permanente avecPour les versions plus anciennes, remplacez
use_inf_as_na
paruse_inf_as_null
.la source
use_inf_as_null
avait été déprécié et sera supprimé dans une future version. Utilisezuse_inf_as_na
plutôt. Ajouter à / mettre à jour la réponse?inf
comme des valeurs nulles au niveau des paramètres globaux au lieu du niveau opérationnel. Cela pourrait potentiellement gagner du temps en imputant les valeurs en premier.Voici une autre méthode
.loc
permettant de remplacer inf par nan sur une série:Donc, en réponse à la question initiale:
la source
Utilisation (rapide et simple):
Cette réponse est basée sur la réponse de DougR dans une autre question. Voici un exemple de code:
Résultat:
la source
Une autre solution encore consisterait à utiliser la
isin
méthode. Utilisez-le pour déterminer si chaque valeur est infinie ou manquante, puis enchaînez leall
méthode pour déterminer si toutes les valeurs des lignes sont infinies ou manquantes.Enfin, utilisez la négation de ce résultat pour sélectionner les lignes qui n'ont pas toutes les valeurs infinies ou manquantes via l'indexation booléenne.
la source
La solution ci-dessus modifiera les
inf
s qui ne sont pas dans les colonnes cibles. Pour y remédier,la source
{v: lst for v in cols}
Vous pouvez utiliser
pd.DataFrame.mask
avecnp.isinf
. Vous devez d'abord vous assurer que vos séries de trames de données sont toutes de typefloat
. Utilisez ensuitedropna
avec votre logique existante.la source