猿问

数据框仍然有 NaN

为什么这个代码:


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  WorkState

298111                               RJ  WorkState

298112                               SP  WorkState

298113                               SP  WorkState

298114                         Scotland  WorkState

298115                              NaN  WorkState

事实上在申请后:


ans = pd.isnull(NDF).any(1).nonzero()[0]

NDF.loc[ans]

我得到多个结果:


        Value      Label

1430923   NaN  FirstName

1430923     -   LastName

1532357   jty   LastName

3822535   NaN        NaN

3830294   NaN        NaN

4300250   NaN        NaN

5201009   NaN        NaN

5396591   NaN        NaN

5485877   NaN        NaN

5561799   NaN        NaN

5619806   NaN        NaN

5680834   NaN        NaN

6620272   NaN        NaN

7539369   NaN        NaN

8390860   NaN        NaN

8688976   NaN        NaN

其中之一不是空的(jty,LastName),我通过简单打印注意到的那个不在索引的 ans 列表中


编辑:(已解决,但认为我应该发布对我有帮助的内容,主要感谢所有回复):


k= numpy.nan

if k :

    print("Hi")

else:

    print("NO")

打印嗨


k= None

if k :

    print("Hi")

else:

    print("NO")

没有打印


(更不用说我使用 .loc[ans] 而不是 .loc[ans,:] 的方式了)


ibeautiful
浏览 98回答 1
1回答

繁星淼淼

首先,我认为缩进是错误的,但当然,这不是什么大问题。然后你必须知道一些事实,NaNatpandas/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。
随时随地看视频慕课网APP

相关分类

Python
我要回答