如何修复Pandas使用random.sample时的‘Population must be a sequence’报错
解决random.sample()处理pandas数组的报错问题
报错原因
random.sample()要求传入的采样对象是标准序列类型(如列表、元组),但df["domain"].unique()返回的是numpy.ndarray,不属于该函数认可的序列范畴,因此触发报错:Population must be a sequence. For dicts or sets, use sorted(d).
解决方案
提供两种可行的处理方式:
方式一:转成列表后使用random.sample()
将numpy数组通过tolist()转为列表,再传入random.sample():
import random # 筛选非安全域名并去重,转为列表 insecure_domains = df[df["is_secure"] == False]["domain"].unique().tolist() # 随机采样50个 random_sample = random.sample(insecure_domains, 50)
方式二:使用pandas内置的sample方法(更推荐)
直接利用pandas对Series的采样能力,无需额外导入random,适配性更好:
# 筛选非安全域名、去重后随机采样50个 random_sample = df[df["is_secure"] == False]["domain"].drop_duplicates().sample(n=50).tolist()
注意事项
如果非安全域名的唯一值数量不足50,上述代码会触发ValueError,可以先判断数量再调整采样数:
insecure_domains = df[df["is_secure"] == False]["domain"].unique().tolist() # 取50和实际数量的较小值 sample_size = min(50, len(insecure_domains)) random_sample = random.sample(insecure_domains, sample_size)
内容的提问来源于stack exchange,提问作者Srijan
相关产品推荐
相关产品推荐

