如何在Pandas的np.array类型列中批量填充缺失值?
Pandas填充numpy数组列缺失值的解决方案
问题根源
直接通过df.loc[mask, "col3"] = vals_to_impute报错,是因为Pandas无法直接匹配包含numpy数组的填充值与目标列的结构,导致长度校验失败。
向量化解决方法(无需循环)
方法1:用pd.Series包裹填充值后赋值
把填充值列表转为带对应索引的Series,让Pandas能正确匹配赋值位置:
import pandas as pd import numpy as np # 构造示例数据 df = pd.DataFrame({ "col1": [1, 2, 3], "col2": ["a", "b", "c"], "col3": [None, np.array([2, 4]), None] }) vals_to_impute = [np.array([1, 2]), np.array([1, 4])] mask = df["col3"].isna() # 生成与缺失值索引匹配的Series fill_series = pd.Series(vals_to_impute, index=df[mask].index) df.loc[mask, "col3"] = fill_series
方法2:使用np.where批量替换
通过向量化条件判断直接替换缺失值:
df["col3"] = np.where(mask, vals_to_impute, df["col3"])
⚠️ 注意:vals_to_impute的长度必须和mask中True的数量完全一致,否则会触发长度不匹配错误。
验证结果
执行后查看df["col3"],每个缺失位置都会被正确填充为对应的numpy数组:
0 [1, 2] 1 [2, 4] 2 [1, 4] Name: col3, dtype: object
内容的提问来源于stack exchange,提问作者qalis
相关产品推荐
相关产品推荐

