即使从 np.nanstd 填充 NaN,如何忽略运行时错误?- Python

从下面的代码中,我正在尝试对三列数据框进行切片。将其放在水平线上的 numpy 数组中,然后按(数据数/15 和 15 的数量)重新整形--> 在这里,我尝试将每 15 个数据分组为一行并计算其标准偏差。


即使有 NaN,我也会尝试忽略数据框中的 NaN。因此我使用了 np.nanstd。


代码如下所示:


k=SpeedLane.iloc[:,0:3]

k = k.values

k = np.ravel(k)

k = np.reshape(k, ((len(k)//15, 15)))

Between_SL_sd = np.nanstd(k, axis=1)

执行代码后出现错误:


C:\Program Files\Anaconda3\lib\site-packages\numpy\lib\nanfunctions.py:1434: RuntimeWarning: Degrees of freedom <= 0 for slice. keepdims=keepdims)

我浏览了 Numpy 文档,发现其中一个 15x 数组已获取所有 NA 并返回此错误。


我承认这一点,但我仍然想忽略这个问题。或者有没有一种方法可以立即用 0 替换 NaN,然后用 NaN 替换它以消除警告?


莫回无
浏览 229回答 1
1回答

蓝山帝景

考虑所有 nan 元素的一维数组,arr = np.array([np.nan, np.nan, np.nan, np.nan])np.isfinite() ->逐元素测试有限性bool_arr = np.isfinite(arr)print(bool_arr)输出:[False False False False]如果可迭代对象中有任何真值,则any -> 将返回 True。chk = not any(bool_arr)print(chk)输出: True这表明数组中的所有值都是 nan。现在,我们可以像这样用零替换所有 nan,arr = np.nan_to_num(arr, copy=True)print(arr)输出: [0. 0. 0. 0.]要将 0 转换回 nan,请执行以下操作,arr[arr == 0] = 'nan' # or use np.nanprint(arr)输出: [nan nan nan nan]现在,考虑一个像下面这样的数据框的例子,&nbsp; &nbsp; col1&nbsp; &nbsp; col2&nbsp; &nbsp; col3&nbsp; &nbsp; col40&nbsp; &nbsp;5.0&nbsp; &nbsp; &nbsp;1.0&nbsp; &nbsp; &nbsp;6.0&nbsp; &nbsp; &nbsp; NaN1&nbsp; &nbsp;2.0&nbsp; &nbsp; &nbsp;2.0&nbsp; &nbsp; &nbsp;1.0&nbsp; &nbsp; &nbsp; NaN2&nbsp; &nbsp;NaN&nbsp; &nbsp; &nbsp;NaN&nbsp; &nbsp; &nbsp;NaN&nbsp; &nbsp; &nbsp; NaN3&nbsp; &nbsp;3.0&nbsp; &nbsp; &nbsp;4.0&nbsp; &nbsp; &nbsp;NaN&nbsp; &nbsp; &nbsp; NaN4&nbsp; &nbsp;NaN&nbsp; &nbsp; &nbsp;NaN&nbsp; &nbsp; &nbsp;NaN&nbsp; &nbsp; &nbsp; NaN要获取每一行的 std,请执行以下操作,&nbsp; &nbsp; std = []for row in range(len(df)):&nbsp; &nbsp; k = df.iloc[row].values&nbsp; &nbsp; bool_arr = np.isfinite(k)&nbsp; &nbsp; chk = not any(bool_arr)&nbsp; &nbsp; if chk == True:&nbsp; &nbsp; &nbsp; &nbsp; k = np.nan_to_num(k, copy=True)&nbsp; &nbsp; st = np.nanstd(k)&nbsp; &nbsp; if chk == True:&nbsp; &nbsp; &nbsp; &nbsp; st = np.nan&nbsp; &nbsp; std.append(st)data = {'std_row_wise': std}std_df = pd.DataFrame(data = data)std_df输出:数据帧的每个值都是std一行。&nbsp; &nbsp;std_row_wise0&nbsp; &nbsp;2.1602471&nbsp; &nbsp;0.4714052&nbsp; &nbsp;NaN3&nbsp; &nbsp;0.5000004&nbsp; &nbsp;NaN
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python