【问题标题】:Loop function for missing data缺失数据的循环功能
【发布时间】:2021-12-24 13:03:43
【问题描述】:

我想用列表解析方法用np.random.normal(mu,s,n)函数改变NaN值,但我做不到。

df_column_values = ["NaN","1","NaN","2","NaN","3","94","4","168","5","NaN"]

n, mu, sigma = 700, 155, 118
array = np.random.normal(mu, sigma, n)
for i in array:
    if i > 0 and i < 400:    
        data['Insulin'].replace(0,(i), inplace=True)  

此函数有效,但所有 NaN 值的输出都相同。 如何改进此代码?

来自Kaggle的原始数据

【问题讨论】:

  • 能否请您分享一个具有预期输出的数据框样本?

标签: python pandas numpy random list-comprehension


【解决方案1】:

您似乎想用范围 (0, 400) 内的正态分布随机值替换缺失值。为此,您需要使用截断的正态分布。

然后,您应该创建一个与您可能要替换的数据长度相同的随机变量向量。

data = pd.DataFrame({'Insulin': ["NaN","1","NaN","2","NaN","3",
"94","4","168","5","NaN"]})
​
import scipy.stats as stats
​
lower, upper = 0, 400
mu, sigma = 155, 118
X = stats.truncnorm(
    (lower - mu) / sigma, 
    (upper - mu) / sigma, 
    loc=mu, scale=sigma)
​
data['Insulin'] = np.where(
     data['Insulin']=="NaN", 
     X.rvs(len(data)),
     data['Insulin'])

data['Insulin'] = np.where(
     data['Insulin'].isna(), 
     X.rvs(len(data)),
     data['Insulin'])

print(data)
       Insulin
0    59.069239
1            1
2   113.143013
3            2
4    63.488282
5            3
6           94
7            4
8          168
9            5
10  109.272469

【讨论】:

  • 我可以跑,但我不能取值。
  • 我的 NaN 值没有改变谢谢df=pd.read_csv('../input/diabetes.csv') datainsulin = df datainsulin['Insulin'].replace(0,(np.NaN), inplace=True) lower, upper = 0, 400 mu, sigma = 155, 118 X = stats.truncnorm( (lower - mu) / sigma, (upper - mu) / sigma, loc=mu, scale=sigma) datainsulin['Insulin'] = np.where( datainsulin['Insulin']=="NaN", X.rvs(len(datainsulin)), datainsulin['Insulin']) print(datainsulin.head())data_cvs
  • 由于您没有共享您的数据,我不知道您的 NaN 值是以什么格式读取的。此外,如果您以后想用随机值替换它们,则不应将 NaN 值替换为 0。如果您实际上将 NaN 值读取为 NaN 而不是上面粘贴的示例中的文本,则可以将条件更改为 isna()。数据['胰岛素'] = np.where(数据['胰岛素'].isna(), X.rvs(len(data)), 数据['胰岛素'])
  • 太好了,谢谢我的问题解决了。谢谢 Giedrius
猜你喜欢
  • 1970-01-01
  • 2013-10-20
  • 2016-02-09
  • 1970-01-01
  • 2011-12-21
  • 1970-01-01
  • 2022-08-02
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多