我试图用来自标准正态分布的值填充数据帧中的NaN值。 这是我当前的代码:
sqlStatement = "select * from sn.clustering_normalized_dataset"
df = psql.frame_query(sqlStatement, cnx)
data=df.pivot("user","phrase","tfw")
dfrand = pd.DataFrame(data=np.random.randn(data.shape[0],data.shape[1]))
data[np.isnan(data)] = dfrand[np.isnan(data)]
在旋转数据帧“data”之后,它看起来像这样:
^{pr2}$但是,我需要用一个新的随机值替换每个NaN值。所以我创建了一个只包含随机值(dfrand)的新df,然后尝试用与Nan的索引相对应的dfrand值来交换缺失的数字(Nan)- 虽然表达
np.isnan(data)
返回由真值和假值组成的数据帧表达式
dfrand[np.isnan(data)]
只返回NaN值,这样整个技巧就不起作用了。 有什么问题吗?在
三千列并不多。你有几排?您总是可以随机生成一个相同大小的数据帧并进行逻辑替换(数据帧的大小将决定这是否可行)。在
如果您知道数据帧的大小:
如果你不知道你的数据帧的大小,那就把事情弄得乱七八糟
^{pr2}$编辑 根据“用户”最后的评论: “德兰德[np.伊斯南(data)]只返回NaN。”
对!这正是你想要的。在我的解决方案中,我有:数据[np.伊斯南(数据)]=dfrand[np.伊斯南(数据)]。翻译过来,这意味着:从dfrand中随机生成的值对应于“data”中的NaN位置,并将其插入“data”,其中“data”是NaN。一个例子将有助于:
如您所见,中的所有NaN都已替换为中基于的NaN值索引随机生成的值。在
你可以尝试这样的方法,假设你正在处理一个系列:
相关问题 更多 >
编程相关推荐