为了账号安全,请及时绑定邮箱和手机立即绑定

数据框仍然有 NaN

数据框仍然有 NaN

ibeautiful 2021-07-01 13:04:06
为什么这个代码:def remove_empties(dataframe):    classes = list(dataframe)    new_dataframe = pd.DataFrame(columns=["Value", "Label"])    for c in classes:        X=[(k,c) for k in dataframe.loc[:,c] if k]        T = pd.DataFrame(X, columns =["Value", "Label"] )        new_dataframe = new_dataframe.append(T)    return new_dataframe仍然产生 NaN 元素?如(打印结果后):298110                               SP  WorkState298111                               RJ  WorkState298112                               SP  WorkState298113                               SP  WorkState298114                         Scotland  WorkState298115                              NaN  WorkState事实上在申请后:ans = pd.isnull(NDF).any(1).nonzero()[0]NDF.loc[ans]我得到多个结果:        Value      Label1430923   NaN  FirstName1430923     -   LastName1532357   jty   LastName3822535   NaN        NaN3830294   NaN        NaN4300250   NaN        NaN5201009   NaN        NaN5396591   NaN        NaN5485877   NaN        NaN5561799   NaN        NaN5619806   NaN        NaN5680834   NaN        NaN6620272   NaN        NaN7539369   NaN        NaN8390860   NaN        NaN8688976   NaN        NaN其中之一不是空的(jty,LastName),我通过简单打印注意到的那个不在索引的 ans 列表中编辑:(已解决,但认为我应该发布对我有帮助的内容,主要感谢所有回复):k= numpy.nanif k :    print("Hi")else:    print("NO")打印嗨k= Noneif k :    print("Hi")else:    print("NO")没有打印(更不用说我使用 .loc[ans] 而不是 .loc[ans,:] 的方式了)
查看完整描述

1 回答

?
繁星淼淼

TA贡献1775条经验 获得超11个赞

首先,我认为缩进是错误的,但当然,这不是什么大问题。

然后你必须知道一些事实,NaNatpandas/numpy不是一些简单的空对象。

如果您使用以下代码bool(np.nan),它将输出True您用来删除空的 at X=[(k,c) for k in dataframe.loc[:,c] if k]

如果确实要删除空或确定nan,请使用numpy.isnanpd.isna。或者你只是pandas.dropna简单地使用。

第二个问题我想你可能会误解nonzero, 在pd.isnull(NDF).any(1)你得到一个pd.Series没有索引的纯之后。所以你只需得到一些由自然数构造的索引。

更简单地说,你应该使用NDF.iloc[ans,:]因为nonzero返回索引Series而不是索引dataframe


查看完整回答
反对 回复 2021-07-06
  • 1 回答
  • 0 关注
  • 97 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信