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

如何用指定范围内的随机数替换Pandas DataFrame中的NaN值

用均匀分布随机数填充Pandas DataFrame的NaN值(基于列内已有值范围)

原始数据示例

代码

import pandas as pd
details = {
    'info1' : [10,None,None,None,None,None,15,None,None,None,5],
    'info2' : [15,None,None,None,10,None,None,None,None,None,20],
}
df = pd.DataFrame(details)

对应DataFrame

info1info2
01015
1NaNNaN
2NaNNaN
3NaNNaN
4NaN10
5NaNNaN
615NaN
7NaNNaN
8NaNNaN
9NaNNaN
10520

解决方案

核心思路

针对每一列,提取该列已有非NaN值的最小值和最大值作为均匀分布的取值范围,为该列的每个NaN位置生成对应范围内的随机数,完成替换。

完整代码实现

需要借助numpy生成均匀分布随机数,代码如下:

import pandas as pd
import numpy as np

# 构建原始DataFrame
details = {
    'info1' : [10,None,None,None,None,None,15,None,None,None,5],
    'info2' : [15,None,None,None,10,None,None,None,None,None,20],
}
df = pd.DataFrame(details)

# 遍历列填充NaN
for col in df.columns:
    # 获取当前列有效数据的最小、最大值
    col_min = df[col].min()
    col_max = df[col].max()
    # 生成对应数量的均匀分布随机数
    random_vals = np.random.uniform(low=col_min, high=col_max, size=df[col].isna().sum())
    # 替换NaN值
    df.loc[df[col].isna(), col] = random_vals

# 查看填充结果
print(df)

补充说明

  • np.random.uniform(low, high, size):生成size个在[low, high)区间内的均匀分布随机数
  • 若需要控制随机数的小数位数,可在生成后添加round()处理,例如:random_vals = np.random.uniform(...).round(2)
  • 每列的取值范围完全由自身已有数据决定,保证填充值与列内原有数据的数值区间匹配

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.23 12:02:41