我目前正在处理亚马逊产品数据集,并希望在名为“amazon_category_and_sub_category”的列中填充NaN。我想用每个制造商的类别模式来做:
modes = X_train.groupby(by="manufacturer["amazon_category_and_sub_category"].apply(lambda x : np.nan if pd.Series.mode(x).size == 0 else pd.Series.mode(x)[0])
我基于X_train
值计算这些模式,但现在我想对X_test
做同样的事情。根据我的理解,我应该使用来自X_train
值的模式。在此之前,我需要检查测试样本中是否有新的制造商:
nans_test = X_test["amazon_category_and_sub_category"].isna()
nans_test = X_test.loc[nans_test, "manufacturer"].isin(modes.index)
之后,当我尝试设置nans_test
掩码的值时:
X_test.loc[nans_test, "amazon_category_and_sub_category"] = modes[X_test.loc[nans_test, ["manufacturer"]]].to_numpy()
我得到一个错误:
IndexingError: Unalignable boolean Series provided as indexer (index of the boolean Series and of the indexed object do not match).
你能解释一下为什么会发生这种情况,以及如何解决它?
UPD:我想先用模式填充NaN,然后为剩下的NaN定义一个值
我检查了X_test
和nans_test
的索引,但它们看起来是一样的。试图谷歌一个错误,但它认为,每一种情况都有它自己的特殊错误的代码
1条答案
按热度按时间hc8w905p1#
我认为你需要链接
&
测试的两个条件,用于按位AND
和Map使用Series.map
: