You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何基于列均值与标准差生成不同随机值替换单元格中的NaN值

问题原因

  • 不添加size参数时np.random.randint仅返回单个整数,fillna会用该单个值填充所有空单元格,所以所有空值都是重复值。
  • 添加size参数后返回的是numpy数组,pandas.Series.fillna的value参数不支持直接传入numpy数组,所以触发类型错误。

单列填充解决方案

直接定位空值的位置,生成对应数量的随机数后赋值即可,代码如下:

import os
import pandas as pd
import numpy as np

filename = os.path.join(os.path.dirname(__file__),'exam.csv')
data = pd.read_csv(filename)

# 计算Math列的均值和标准差
math_mean = data['Math'].mean()
math_std = data['Math'].std()
low = int(math_mean - math_std)
high = int(math_mean + math_std) + 1 # 适配np.random.randint左闭右开的特性,保证包含上限值

# 统计空值数量,生成对应数量的随机数,直接赋值给空值位置
na_count = data['Math'].isna().sum()
if na_count > 0:
    random_grades = np.random.randint(low, high, size=na_count)
    data.loc[data['Math'].isna(), 'Math'] = random_grades

print(data)

多列批量填充扩展

如果后续需要处理多列,可以用循环批量实现:

# 定义需要填充的列名列表
cols_to_fill = ['Math', 'English', 'Chemistry']

for col in cols_to_fill:
    col_mean = data[col].mean()
    col_std = data[col].std()
    low = int(col_mean - col_std)
    high = int(col_mean + col_std) + 1
    na_count = data[col].isna().sum()
    if na_count > 0:
        data.loc[data[col].isna(), col] = np.random.randint(low, high, size=na_count)

内容的提问来源于stack exchange,提问作者Robin Sage

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.03 09:27:06