我正在使用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检查学生价值吗?
答案 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()]