ibeautiful
2021-07-01 13:04:06
為什么這個(gè)代碼: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仍然產(chǎn)生 NaN 元素?如(打印結(jié)果后):298110 SP WorkState298111 RJ WorkState298112 SP WorkState298113 SP WorkState298114 Scotland WorkState298115 NaN WorkState事實(shí)上在申請(qǐng)后:ans = pd.isnull(NDF).any(1).nonzero()[0]NDF.loc[ans]我得到多個(gè)結(jié)果: 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),我通過簡(jiǎn)單打印注意到的那個(gè)不在索引的 ans 列表中編輯:(已解決,但認(rèn)為我應(yīng)該發(fā)布對(duì)我有幫助的內(nèi)容,主要感謝所有回復(fù)):k= numpy.nanif k : print("Hi")else: print("NO")打印嗨k= Noneif k : print("Hi")else: print("NO")沒有打?。ǜ挥谜f我使用 .loc[ans] 而不是 .loc[ans,:] 的方式了)
1 回答

繁星淼淼
TA貢獻(xiàn)1775條經(jīng)驗(yàn) 獲得超11個(gè)贊
首先,我認(rèn)為縮進(jìn)是錯(cuò)誤的,但當(dāng)然,這不是什么大問題。
然后你必須知道一些事實(shí),NaN
atpandas/numpy
不是一些簡(jiǎn)單的空對(duì)象。
如果您使用以下代碼bool(np.nan)
,它將輸出True
您用來刪除空的 at X=[(k,c) for k in dataframe.loc[:,c] if k]
。
如果確實(shí)要?jiǎng)h除空或確定nan
,請(qǐng)使用numpy.isnan
或pd.isna
?;蛘吣阒皇?code>pandas.dropna簡(jiǎn)單地使用。
第二個(gè)問題我想你可能會(huì)誤解nonzero
, 在pd.isnull(NDF).any(1)
你得到一個(gè)pd.Series
沒有索引的純之后。所以你只需得到一些由自然數(shù)構(gòu)造的索引。
更簡(jiǎn)單地說,你應(yīng)該使用NDF.iloc[ans,:]
因?yàn)?code>nonzero返回索引Series
而不是索引dataframe
。
添加回答
舉報(bào)
0/150
提交
取消