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

时间:2015-10-14 11:28:14

标签: python pandas iteration row dataframe

我有一个初学者的问题。我有一个迭代的数据帧,我想检查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

表明第一行输出中的浮点数是导致错误的原因。任何人都可以告诉我如何实现我的目标吗?

3 个答案:

答案 0 :(得分:4)

如您所知,

中的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

答案 1 :(得分:1)

试试这个:

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

上面的代码将为您提供Column2没有空值

的数据

答案 2 :(得分:1)

在Series上使用iteritems(这是从DataFrame中获取列时获得的)迭代对(index,value)。因此,您的item将在循环的三次迭代中获取值0,1和2,而您的frame将采用值'hey'NaN和{ {1}}(所以&#34;框架&#34;可能是一个坏名字)。该错误来自于尝试在'up'上使用方法notnull(表示为浮点数)。

您可以改为使用功能NaN

pd.notnull

另一种方法是在整个系列中使用In [3]: pd.notnull(np.nan) Out[3]: False In [4]: pd.notnull('hey') Out[4]: True ,然后迭代这些值(现在是布尔值):

notnull