如何遍历数据帧的行并检查列行中的值是否为 NaN

How to iterate through rows of a dataframe and check whether value in a column row is NaN

我有一个新手问题。我有一个正在迭代的数据框,我想检查 column2 行中的值是否为 NaN,如果不是 NaN,则对该值执行操作。我的 DataFrame 如下所示:

df:

  Column1  Column2
0    a        hey
1    b        NaN
2    c        up

我现在正在尝试的是:

for item, frame in df['Column2'].iteritems():
    if frame.notnull() == True:
        print 'frame'

背后的想法是,我对第 2 列中的行和 print 帧中的每一行进行迭代,以获取具有值(字符串)的每一行。然而我得到的是:

AttributeError                            Traceback (most recent call last)
<ipython-input-80-8b871a452417> in <module>()
      1 for item, frame in df['Column2'].iteritems():
----> 2     if frame.notnull() == True:
      3         print 'frame'

AttributeError: 'float' object has no attribute 'notnull'

当我只 运行 我的代码的第一行时,我得到

0
hey
1
nan
2
up

这表明第一行输出中的浮点数是错误的原因。谁能告诉我怎样才能完成我想要的?

试试这个:

df[df['Column2'].notnull()]

上面的代码会给你 Column2 没有空值的数据

如您所知,frame

for item, frame in df['Column2'].iteritems():

是列中的每个 row,其类型将是列中元素的类型(很可能不是 SeriesDataFrame)。因此,frame.notnull() 是行不通的。

你应该试试 -

for item, frame in df['Column2'].iteritems():
    if pd.notnull(frame):
        print frame

在 Series 上使用 iteritems(这是从 DataFrame 中获取列时得到的结果)迭代对 (index, value)。因此,您的 item 将在循环的三个迭代中取值 0、1 和 2,而您的 frame 将取值 'hey'NaN'up'(所以 "frame" 可能是一个不好的名字)。错误来自尝试在 NaN(表示为浮点数)上使用方法 notnull

您可以使用函数 pd.notnull 代替:

In [3]: pd.notnull(np.nan)
Out[3]: False

In [4]: pd.notnull('hey')
Out[4]: True

另一种方法是对整个系列使用 notnull,然后迭代这些值(现在是布尔值):

for _, value in df['Column2'].notnull().iteritems():
    if value:
        print 'frame'