J'ai la suivante df
en pandas.
0 A B C
1 2 NaN 8
Comment puis-je vérifier si df.iloc[1]['B']
est NaN?
J'ai essayé d'utiliser df.isnan()
et j'ai un tableau comme celui-ci:
0 A B C
1 false true false
mais je ne suis pas sûr de savoir comment indexer la table et s’il s’agit d’un moyen efficace d’exécuter le travail?
jezrael réponse est sur place. Si vous ne vous souciez que de la valeur NaN, je cherchais une option plus rapide, car, selon mon expérience, la somme de tableaux plats est (étrangement) plus rapide que le comptage. Ce code semble plus rapide:
df.isnull().values.any()
Par exemple:
In [2]: df = pd.DataFrame(np.random.randn(1000,1000))
In [3]: df[df > 0.9] = pd.np.nan
In [4]: %timeit df.isnull().any().any()
100 loops, best of 3: 14.7 ms per loop
In [5]: %timeit df.isnull().values.sum()
100 loops, best of 3: 2.15 ms per loop
In [6]: %timeit df.isnull().sum().sum()
100 loops, best of 3: 18 ms per loop
In [7]: %timeit df.isnull().values.any()
1000 loops, best of 3: 948 µs per loop
Si vous recherchez les index de NaN dans une colonne spécifique, vous pouvez utiliser
list(df['B'].index[df['B'].apply(np.isnan)])
Si vous voulez obtenir les index de toutes les valeurs possibles de NaN dans le cadre de données, vous pouvez procéder
row_col_indexes = list(map(list, np.where(np.isnan(np.array(df)))))
indexes = []
for i in Zip(row_col_indexes[0], row_col_indexes[1]):
indexes.append(list(i))
Et si vous recherchez un liner, vous pouvez utiliser:
list(Zip(*[x for x in list(map(list, np.where(np.isnan(np.array(df)))))]))