【问题标题】: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

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

【问题讨论】:

    标签: python pandas iteration row dataframe


    【解决方案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被呈现为浮点数!
      猜你喜欢
      • 2021-10-23
      • 1970-01-01
      • 2018-07-21
      • 2017-12-21
      • 1970-01-01
      • 2020-03-16
      • 1970-01-01
      • 2017-01-10
      • 1970-01-01
      相关资源
      最近更新 更多