为什么这个代码: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个赞
首先,我认为缩进是错误的,但当然,这不是什么大问题。
然后你必须知道一些事实,NaN
atpandas/numpy
不是一些简单的空对象。
如果您使用以下代码bool(np.nan)
,它将输出True
您用来删除空的 at X=[(k,c) for k in dataframe.loc[:,c] if k]
。
如果确实要删除空或确定nan
,请使用numpy.isnan
或pd.isna
。或者你只是pandas.dropna
简单地使用。
第二个问题我想你可能会误解nonzero
, 在pd.isnull(NDF).any(1)
你得到一个pd.Series
没有索引的纯之后。所以你只需得到一些由自然数构造的索引。
更简单地说,你应该使用NDF.iloc[ans,:]
因为nonzero
返回索引Series
而不是索引dataframe
。
添加回答
举报
0/150
提交
取消