如何从包含nan的熊猫数据框中删除行

时间:2020-08-11 11:49:09

标签: python pandas

我正在使用python3.x。我有一个熊猫数据框,只有一列,学生。在第501行,学生包含nan df.at[501,'student']返回nan 为了删除这个,我使用了以下代码

df.at['student'].replace('', np.nan, inplace=True)

但是在那之后,我仍然得到nan的{​​{1}} 我也试过了

df.at[501,'student']

但是我在循环中使用df来检查学生的价值以应用一些业务逻辑,但是使用df.at['student'].replace('', np.nan, inplace=True) 我得到inplace=True 您能建议我如何删除key error :501并在for循环中使用df检查学生价值吗?

3 个答案:

答案 0 :(得分:1)

添加另一种答案,因为情况完全不同。
我认为您没有在数据框上正确循环,似乎您是在循环依赖数据框的索引时,可能应该逐行循环或最好使用df.apply
如果您仍然想循环浏览项目,而不关心先前的索引,则可以使用df.reset_index(drop=True)

重置索引
df['student'].replace('', np.nan, inplace=True)
df['student'].dropna(inplace=True)
df = df.reset_index(drop=True)
# do your loop here

您的问题是,当您删除项目时,将熊猫放在索引501上然后尝试访问它,熊猫并不会自动更新索引。

答案 1 :(得分:0)

您使用的replace函数会将第二个参数替换为第一个参数。
如果要将np.nan替换为空,则必须这样做

df['student'].replace(np.nan, '', inplace=True)

但这不会删除行,只是将其替换为空字符串,

df['student'].dropna(inplace=True)

但是您必须在循环遍历元素之前执行此操作,不要在循环中dropna

了解循环中您到底在做什么

答案 2 :(得分:0)

删除“学生”列中包含Nan值的行的一种方法是

df = df[~df['student'].isnull()]