通过从pandas数据帧中的非缺失值中随机选择来填充缺失数据

问题描述 投票:3回答:4

我有一个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

我想要例如foo['A'][2]=2foo['A'][5]=3我的pandas DataFrame的形状是(6940,154)。我试试这个

foo['A'] = foo['A'].fillna(random.choice(foo['A'].values.tolist()))

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

python pandas missing-data
4个回答
3
投票

您可以使用pandas.fillna方法和random.choice方法通过随机选择特定列来填充缺失值。

import random
import numpy as np

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

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


3
投票

这是在对第一个答案进行改进之后对这个问题的另一种方法,并根据如何检查numpy int是否nand在numpy文档中找到here

foo['A'].apply(lambda x: np.random.choice([x for x in range(min(foo['A']),max(foo['A'])]) if (np.isnan(x)) else x)

1
投票

这对我在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

1
投票

这是另一个Pandas DataFrame方法

import numpy as np
def fill_with_random(df2, column):
    '''Fill `df2`'s column with name `column` with random data based on non-NaN data from `column`'''
    df = df2.copy()
    df[column] = df[column].apply(lambda x: np.random.choice(df[column].dropna().values) if np.isnan(x) else x)
    return df
© www.soinside.com 2019 - 2024. All rights reserved.