我想检查 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)
1条答案
按热度按时间8zzbczxx1#
原因是
is
运算符不是在NaN值上下文中测试相等性的合适方法。Here is a post which discusses the topic in more detail.