Pandas列空值填充问题求助:随机数/行索引填充异常
解决DataFrame中NaN填充的两个问题
1. 为name列NaN填充不同随机数
你当前代码的问题是random.randrange(10000,100000)只生成一个随机数,Pandas会把这个值批量广播到所有NaN单元格,导致所有填充值相同。
解决代码
可以用两种方式生成对应数量的随机数序列:
- 借助numpy生成随机整数数组:
import numpy as np nan_mask = all_df["name"].isnull() all_df.loc[nan_mask, "name"] = np.random.randint(10000, 100000, size=nan_mask.sum())
- 用列表推导式生成随机数列表:
import random nan_mask = all_df["name"].isnull() all_df.loc[nan_mask, "name"] = [random.randrange(10000, 100000) for _ in range(nan_mask.sum())]
2. 用行索引填充name列NaN
你的代码错误在于直接使用整个DataFrame的索引数组all_df["name"].index.values,Pandas的索引对齐机制会导致赋值不匹配,无法正确填充到NaN行。
解决代码
直接提取NaN行对应的索引值赋值,或用fillna方法简化:
# 方法1:提取NaN行的索引赋值 nan_mask = all_df["name"].isnull() all_df.loc[nan_mask, "name"] = all_df[nan_mask].index.values # 方法2:用fillna直接填充索引 all_df["name"] = all_df["name"].fillna(all_df.index)
内容的提问来源于stack exchange,提问作者dimzev
相关产品推荐
相关产品推荐

