通过从熊猫数据框中的非缺失值中随机选择来填充缺失数据

Don*_*eon 6 python missing-data pandas

我有一个熊猫数据框,其中有几个缺失值。我注意到非缺失值彼此接近。因此,我想通过随机选择非缺失值来估算缺失值。

例如:

import pandas as pd
import random
import numpy as np

foo = pd.DataFrame({'A': [2, 3, np.nan, 5, np.nan], 'B':[np.nan, 4, 2, np.nan, 5]})
foo
    A   B
0   2 NaN
1   3   4
2 NaN   2   
3   5 NaN
4 NaN   5
Run Code Online (Sandbox Code Playgroud)

我想比如foo['A'][2]=2foo['A'][5]=3 我的熊猫的形状数据框是(6940,154)。我尝试这个

foo['A'] = foo['A'].fillna(random.choice(foo['A'].values.tolist()))
Run Code Online (Sandbox Code Playgroud)

但它不起作用。你能帮我实现吗?最好的祝福。

bam*_*dan 8

您可以使用pandas.fillnamethod 和random.choicemethod 随机选择特定列来填充缺失值。

import random
import numpy as np

df["column"].fillna(lambda x: random.choice(df[df[column] != np.nan]["column"]), inplace =True)
Run Code Online (Sandbox Code Playgroud)

其中 column 是您要nan随机填充非值的列。

  • 我已经资助了答案。我这样做了:`foo = foo.apply(lambda x: x.fillna(random.choice(x.dropna())), axis=1)`。你的回答给出了线索​​。非常感谢您的帮助。 (6认同)
  • 我试试。但是它没有输入值,而是将 `<function <lambda> 放在 0x7fa4eb48b9b0>` 处。 (4认同)

小智 6

我这样做是为了用随机非 NaN 值填充 NaN 值:

import random

df['column'].fillna(random.choice(df['column'][df['column'].notna()]), inplace=True)
Run Code Online (Sandbox Code Playgroud)


Kar*_*lis 5

这在 Pandas DataFrame 上对我很有效

def randomiseMissingData(df2):
    "randomise missing data for DataFrame (within a column)"
    df = df2.copy()
    for col in df.columns:
        data = df[col]
        mask = data.isnull()
        samples = random.choices( data[~mask].values , k = mask.sum() )
        data[mask] = samples

return df
Run Code Online (Sandbox Code Playgroud)