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
相关产品推荐
相关产品推荐

