目标是用从同一列中选择的随机数填充一列中的nan值。
我可以一次完成这一列,但是当遍历数据帧中的所有列时,我会遇到各种各样的错误。当我使用“ random.choice”时,我得到的是字母而不是列值。
df1 = df_na
df2 = df_nan.dropna()
for i in range(5):
for j in range(len(df1)):
if np.isnan(df1.iloc[j,i]):
df1.iloc[j,i] = np.random.choice(df2.columns[i])
df1
关于前进的任何建议?
答案 0 :(得分:1)
您可以这样做:
# sample data
df =pd.DataFrame({'a':[1,2,None,18,20,None],
'b': [22,33,44,None,100,32]})
# fill missing with a random value from that column
for col in df.columns:
df[col].fillna(df[col].dropna().sample().values[0], inplace=True)
a b
0 1.0 22.0
1 2.0 33.0
2 20.0 44.0
3 18.0 100.0
4 20.0 100.0
5 20.0 32.0
答案 1 :(得分:1)
您可以将pd.DataFrame.apply
与np.random.choice
结合使用:
df = df.apply(lambda s: s.fillna(np.random.choice(s.dropna())))