web-dev-qa-db-fra.com

Supprimer un nan d'une liste

En essayant de travailler sur un projet avec pandas j'ai rencontré un problème. J'avais une liste avec une valeur nan et je n'ai pas pu la supprimer.

J'ai essayé:

incoms=data['int_income'].unique().tolist()
incoms.remove('nan')

Mais cela n'a pas fonctionné:

list.remove (x): x absent de la liste "

La liste incoms est la suivante:

[75000.0, 50000.0, 0.0, 200000.0, 100000.0, 25000.0, nan, 10000.0, 175000.0, 150000.0, 125000.0]
7
מורן רזניק

Ce que vous pouvez faire est simplement d'obtenir une liste nettoyée où vous ne mettez pas les valeurs qui, une fois converties en chaînes, sont "nan".

Le code serait:

incoms = [incom for incom in incoms if str(incom) != 'nan']
10
zoubida13

Je pense que vous avez besoin de dropna pour supprimer NaNs:

incoms=data['int_income'].dropna().unique().tolist()
print (incoms)
[75000.0, 50000.0, 0.0, 200000.0, 100000.0, 25000.0, 10000.0, 175000.0, 150000.0, 125000.0]

Et si toutes les valeurs sont uniquement des entiers:

incoms=data['int_income'].dropna().astype(int).unique().tolist()
print (incoms)
[75000, 50000, 0, 200000, 100000, 25000, 10000, 175000, 150000, 125000]

Ou supprimez NaNs en sélectionnant toutes les valeurs non NaN par numpy.isnan :

a = data['int_income'].unique()
incoms= a[~np.isnan(a)].tolist()
print (incoms)
[75000.0, 50000.0, 0.0, 200000.0, 100000.0, 25000.0, 10000.0, 175000.0, 150000.0, 125000.0]

a = data['int_income'].unique()
incoms= a[~np.isnan(a)].astype(int).tolist()
print (incoms)
[75000, 50000, 0, 200000, 100000, 25000, 10000, 175000, 150000, 125000]

Pure python solution - plus lent si gros DataFrame:

incoms=[x for x in  list(set(data['int_income'])) if pd.notnull(x)]
print (incoms)
[0.0, 100000.0, 200000.0, 25000.0, 125000.0, 50000.0, 10000.0, 150000.0, 175000.0, 75000.0]

incoms=[int(x) for x in  list(set(data['int_income'])) if pd.notnull(x)]
print (incoms)
[0, 100000, 200000, 25000, 125000, 50000, 10000, 150000, 175000, 75000]
14
jezrael

Une possibilité dans ce cas particulier est de supprimer les nans plus tôt pour éviter de le faire dans la liste:

incoms=data['int_income'].dropna().unique().tolist()
0
Rafael Valero