亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

Numpy.nanstd 無法正確跳過通過 excel 讀入的 DataFrame 的 nan 值

Numpy.nanstd 無法正確跳過通過 excel 讀入的 DataFrame 的 nan 值

隔江千里 2023-06-27 17:59:21
我有一個名為“nan_test.xlsx”的Excel 文件,如下所示(原始文件有空格,但在 python 中打印時,空格被替換為“NaN”:? ? ID? Month1? Month2? Month30? ABC? ? ?1.0? ? ? ? ? ? ? ?1? FFF? ? ?2.0? ? ?2.0? ? ?2.02? XYZ? ? ? ? ? ? ?3.0? ? ?3.0我試圖獲得標準差,同時忽略空白/納米值。截至目前,我已經有了這個,但行為到處都是。它正確地對具有 3 個數值、2 個數值和 1 個 nan 值的行執行 std dev,但不適用于具有 2 個 nan 值和 1 個數值的行。df = pd.read_excel('nan_test.xlsx')print(df)df['std'] = np.nanstd(df.iloc[:, 1:], axis=1, ddof=1)print(df)? ? ID? Month1? Month2? Month30? ABC? ? ?1.0? ? ?NaN? ? ?NaN1? FFF? ? ?2.0? ? ?2.0? ? ?2.02? XYZ? ? ?NaN? ? ?3.0? ? ?3.0? ? ID? Month1? Month2? Month3? std0? ABC? ? ?1.0? ? ?NaN? ? ?NaN? NaN1? FFF? ? ?2.0? ? ?2.0? ? ?2.0? 0.02? XYZ? ? ?NaN? ? ?3.0? ? ?3.0? 0.0
查看完整描述

2 回答

?
躍然一笑

TA貢獻1826條經驗 獲得超6個贊

它ddof=1導致第一行std返回NaN。


ddof : int, optional


Means Delta Degrees of Freedom. The divisor used in calculations is N - ddof, 

where N represents the number of non-NaN elements. By default ddof is zero.

因此,N第一行是1(即只有 1 個非 NaN 值)。N - ddof = 1 - 1 = 0。除數為0,因此std返回NaN


你需要ddof=0有第一行


df['std'] = np.nanstd(df.iloc[:, 1:], axis=1, ddof=0)


Out[416]:

    ID  Month1  Month2  Month3  std

0  ABC     1.0     NaN     NaN  0.0

1  FFF     2.0     2.0     2.0  0.0

2  XYZ     NaN     3.0     3.0  0.0


查看完整回答
反對 回復 2023-06-27
?
慕蓋茨4494581

TA貢獻1850條經驗 獲得超11個贊

問題是您將 delta 自由度 (?ddof) 設置為 1。正如文檔中所述np.nanstd

計算中使用的除數為 N - ddof,其中 N 表示非 NaN 元素的數量。默認情況下 ddof 為零。

因此,通過將其設置為 1,當只有 1 個非 NaN 的值時,除數將變為 0,并且得到 NaN。

如果更改為 set?ddof=0,則第一行的標準差值為 0


查看完整回答
反對 回復 2023-06-27
  • 2 回答
  • 0 關注
  • 203 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號