簡體   English   中英

如何僅替換 Pandas DataFrame 中的第一個 Nan 值?

[英]How to replace only first Nan value in Pandas DataFrame?

我正在嘗試用隨機種子生成的數字列表替換 Nan。 這意味着每個 Nan 值都需要替換為唯一的 integer。 列中的項目是唯一的,但行似乎只是在復制自己? 歡迎大家提出意見

np.random.seed(56)
rs=np.random.randint(1,100, size=total)

df=pd.DataFrame(index=np.arange(rows), columns=np.arange(columns))
    
for i in rs:
    df=df.fillna(value=i, limit=1)

df.fillna()將替換所有包含 NA 的值。 因此,您的代碼實際上只是在 forloop 的第一次迭代中更改了 NA 值,因為沒有其他要填充的值。

您可以使用 applymap function 遍歷所有行並以這種方式用隨機生成的值填充 NAN:

df.applymap(lambda l: l if not np.isnan(l) else np.random.randint(1,100, size=total)))

你可以試試stack

s = df.stack(dropna=False)
s = s[s.isna()]
s[:] = rs
df.update(s.unstack())

或者我們可以從原始創建

df = pd.DataFrame(data = rs.reshape(row, col),
                  index=np.arange(row), 
                  columns=np.arange(col))

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM