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

Posted

技术标签:

【中文标题】如何遍历数据框的行并检查列行中的值是不是为 NaN【英文标题】:How to iterate through rows of a dataframe and check whether value in a column row is NaN如何遍历数据框的行并检查列行中的值是否为 NaN 【发布时间】:2016-01-12 11:16:45 【问题描述】:

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

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

【问题讨论】:

【参考方案1】:

试试这个:

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

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

【讨论】:

【参考方案2】:

如你所见,frame in

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

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

你应该试试 -

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

【讨论】:

它的工作原理是只打印帧(行),但nan 值仍然存在。但是为什么帧值应该是字符串时会浮动? Pandas 将所有缺失值表示为浮点数nan 您可以使用pd.notnull()来检查该值是否不是NaN。如果您还想过滤掉空字符串/ None 值,您也可以这样做 - if frame and pd.notnull(frame): @AnandSKumar 好的,这行得通。我想我之前尝试过时调用 .notnull() 是错误的。非常感谢!【参考方案3】:

在 Series 上使用 iteritems(这是从 DataFrame 中获取列时得到的结果)迭代对(索引、值)。因此,您的 item 将在循环的三个迭代中采用值 0、1 和 2,而您的 frame 将采用值 'hey'NaN'up'(所以“帧”是可能是一个坏名字)。错误来自尝试在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'

【讨论】:

感谢错误的解释,不知道nan被呈现为浮点数!

以上是关于如何遍历数据框的行并检查列行中的值是不是为 NaN的主要内容,如果未能解决你的问题,请参考以下文章

在添加Flask,SQLAlchemy之前检查表中的行中的值是不是已经存在

Python Pandas 遍历行并访问列名

如何检查单元测试中的值是不是为nan?

选择至少一列为 NaN 的数据框的行 [重复]

遍历 pandas 数据框中的行并匹配列表中的元组并创建一个新的 df 列

pandas 数据框的颜色行并转换为 HTML 表