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

Pandas替换salary1列空值为区间随机值触发TypeError如何解决

报错原因
  • range() 函数仅支持传入整数作为起止参数,你数据集的salary1列是浮点型,计算得到的最大值、最小值都是浮点值,直接传入range()就会触发该类型错误。
  • 原代码逻辑也不符合需求:replace方法传入序列参数时是按位置匹配替换,无法实现每个缺失值单独取区间内随机值的效果。
修复方案

首先确保已导入numpy依赖:

import numpy as np

如果需要生成区间内的整数随机值填充:

max_sal = int(df['salary1'].max())
min_sal = int(df['salary1'].min())
# 仅对空值位置赋值随机数,不修改原有有效值
df.loc[df['salary1'].isna(), 'salary1'] = df[df['salary1'].isna()].apply(lambda x: np.random.randint(min_sal, max_sal + 1), axis=1)

如果数据量较大,可使用更高效的向量化写法,避免逐行apply:

max_sal = int(df['salary1'].max())
min_sal = int(df['salary1'].min())
na_cnt = df['salary1'].isna().sum()
df.loc[df['salary1'].isna(), 'salary1'] = np.random.randint(min_sal, max_sal + 1, size=na_cnt)

如果需要保留浮点类型,生成区间内的浮点随机值填充:

max_sal = df['salary1'].max()
min_sal = df['salary1'].min()
na_cnt = df['salary1'].isna().sum()
df.loc[df['salary1'].isna(), 'salary1'] = np.random.uniform(min_sal, max_sal, size=na_cnt)

注:np.random.randint 生成的是左闭右开区间的整数,所以需要将结束值设为max_sal + 1才能包含原列的最大值。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 11:36:05