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

如何用random.choice均匀填充DataFrame指定条件列的空值?

解决DataFrame按条件随机列表填充空值的问题

问题分析

  • 第一种方法中random.choice(top5C)仅执行一次,生成单个固定值,导致所有空值被同一值填充,无法实现随机分配。
  • 第二种方法使用map仅返回处理后的序列,但未将结果赋值回原DataFrame,因此原数据无变化。

可行解决办法

方法1:apply结合赋值修改原数据

直接对目标列执行apply处理,并将结果赋值回原DataFrame的对应位置:

import random
import pandas as pd

top5 = ['Pasta', 'Waffles', 'Mocktails', 'Coffee', 'BrownieChocolate', 'Burgers']

# 针对rest_type为'Quick Bites'的行,处理dish_liked字段的空值
new_df.loc[new_df['rest_type'] == 'Quick Bites', 'dish_liked'] = new_df.loc[new_df['rest_type'] == 'Quick Bites', 'dish_liked'].apply(
    lambda x: random.choice(top5) if pd.isnull(x) else x
)

核心是将apply的处理结果赋值回原DataFrame的对应列,才能真正修改原数据。

方法2:生成随机列表批量填充

先统计目标区域的空值数量,生成对应长度的随机值列表后批量填充,适合大数据量场景:

import random
import pandas as pd

top5C = ['Pasta', 'Waffles', 'Mocktails', 'Coffee', 'BrownieChocolate', 'Burgers']

# 筛选出rest_type为Cafe且dish_liked为空的行
mask = (new_df['rest_type'] == 'Cafe') & new_df['dish_liked'].isnull()
# 生成与空值数量匹配的随机值列表
random_values = [random.choice(top5C) for _ in range(mask.sum())]
# 批量填充空值
new_df.loc[mask, 'dish_liked'] = random_values

这种方式避免逐行处理的开销,效率更高。

补充说明

  • 两种方法均能实现每个空值随机选取列表中的值,而非单一值填充。
  • 若需固定随机结果,可在代码开头添加random.seed(123)(数值自定义)来锁定随机种子。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 22:10:50