我试图理解None vs NaN和正确的语法



我正在导入一个excel电子表格到熊猫,需要确定有多少单元格有'NONE'在他们。下面的代码片段是我复制该问题的最佳尝试,它将"NONE"替换为None。然而,当我搜索None时,条件语句失败了。为什么呢?

import pandas as pd
import numpy as np

df = pd.DataFrame(np.array([['B',1,3.4], ['A','NONE',8.9],['C',3,4.6]]), 
columns=['Part','Quantity','Cost'])
df.replace('NONE', None, inplace=True)
column = set()
count = 0
for row in range(df.shape[0]):
for col in range(df.shape[1]):
val = df.iat[row,col]
if (val == None):
column.add(df.columns[col])
count += 1
print(count)
print(list(column))

最后,当我用pd替换None时。NA,则条件语句通过,但仅当我使用

if (val is pd.NA):

真正让我失望的是当我使用IPython控制台检查None时,

In [0]: a = None
In [1]: a == None
Out [1]: True

我基本上试图理解为什么条件语句无法检查None。目的是清理DataFrame,然后将其加载到scikit中进行回归分析。

提前谢谢你!

第一期:替换"with None并不像预期的那样工作。为什么:根据文档https://pandas.pydata.org/docs/reference/api/pandas.DataFrame.replace.html"method"的默认值为"pad","None"将被覆盖。注意,None在这里是一个特殊的值。

第二期:Nonevsnp.nan。正如评论中提到的,它们是非常不同的。type(np.nan)为浮点数,np.nan == np.nan返回False,但np.nan is np.nan为真。是的,它不是很直观。

最新更新