web-dev-qa-db-fra.com

Comment vérifier si une cellule donnée dans un pandas DataFrame est nulle?

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?

4
Newskooler

Utilisez pd.isnull , pour choisir une utilisation loc ou iloc :

print (df)
   0  A   B  C
0  1  2 NaN  8

print (df.loc[0, 'B'])
nan

a = pd.isnull(df.loc[0, 'B'])
print (a)
True

print (df['B'].iloc[0])
nan

a = pd.isnull(df['B'].iloc[0])
print (a)
True
8
jezrael

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
1
ankur09011

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)))))]))
0
Loochie