我正在尝试做一些简单的事情,比如在巨量数据集中检查python中的NaN值(我知道它们在"年龄"列中,所以这更需要练习(。
当使用np.isnan时,我得到:类型错误:输入类型不支持ufunc"isnan",并且根据强制转换规则"safe",无法将输入安全地强制为任何支持的类型
ds = sn.load_dataset("titanic")
for i in range(0,len(ds.index)):
for j in range(0, len(ds.columns)):
# Check if cell is NaN
if np.isnan(ds.iloc[i][j]):
print("it works, yay")
为什么不起作用?
根据numpy.isnan
、ufunc
文档和numpy.can_cast
的文档;您当前面临的问题是由于CCD_;int"";浮动";。我建议你使用pd.isna
,它正在返回所需的结果:
count = 0
ds = sns.load_dataset("titanic")
for i in range(0,len(ds.index)):
for j in range(0, len(ds.columns)):
# Check if cell is NaN
if pd.isna(ds.iloc[i][j]):
count+=1
print(count)
在这里,我用一个计数器替换了print以检查NaN值,它返回869,这与数据集中的值一致。
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 891 entries, 0 to 890
Data columns (total 15 columns):
# Column Non-Null Count Dtype
--- ------ -------------- -----
0 survived 891 non-null int64
1 pclass 891 non-null int64
2 sex 891 non-null object
3 age 714 non-null float64
4 sibsp 891 non-null int64
5 parch 891 non-null int64
6 fare 891 non-null float64
7 embarked 889 non-null object
8 class 891 non-null category
9 who 891 non-null object
10 adult_male 891 non-null bool
11 deck 203 non-null category
12 embark_town 889 non-null object
13 alive 891 non-null object
14 alone 891 non-null bool
dtypes: bool(2), category(2), float64(2), int64(4), object(5)
memory usage: 80.7+ KB