如何遍历数据帧的行并检查列行中的值是否为 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
,其类型将是列中元素的类型(很可能不是 Series
或 DataFrame
)。因此,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'
我有一个新手问题。我有一个正在迭代的数据框,我想检查 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
,其类型将是列中元素的类型(很可能不是 Series
或 DataFrame
)。因此,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'