numpy 如何检查 Dataframe 中的Nan值?

rbpvctlc  于 2023-02-23  发布在  其他
关注(0)|答案(1)|浏览(155)

我想检查 Dataframe 中的特定列是否包含nan。然后删除特定列包含nan的行。
下面是我的错误代码:

import numpy as np
import pandas as pd
from numpy import nan

df = pd.DataFrame(np.array([[nan, 2, 3], [nan, nan, 6], [nan, 8, 9]]),
                   columns=['a', 'b', 'c'])

for i in range(len(df.index)):
    print(type(df["b"].loc[i]))
    if df["b"].loc[i] is np.float64(nan):
        df = df.drop([i])
print(df)

但是df[“b”].loc[i]为np。float64(nan)为False,结果为

<class 'numpy.float64'>
<class 'numpy.float64'>
<class 'numpy.float64'>
    a    b    c
0 NaN  2.0  3.0
1 NaN  NaN  6.0
2 NaN  8.0  9.0

我可以用另一个代码来做,但我想知道为什么上面的代码不能做到这一点。
正确代码为

df1 = pd.DataFrame(np.array([[nan, 2, 3], [nan, nan, 6], [nan, 8, 9]]),
                   columns=['a', 'b', 'c'])

for i in range(len(df1.index)):
    if df1.isna()["b"].loc[i]:
        df1 = df1.drop([i])
print(df1)
8zzbczxx

8zzbczxx1#

原因是is运算符不是在NaN值上下文中测试相等性的合适方法。
Here is a post which discusses the topic in more detail.

相关问题