numpy 索引错误:不可对齐的布尔序列作为索引器提供,如何修复?

lmvvr0a8  于 2023-05-22  发布在  其他
关注(0)|答案(1)|浏览(174)

我目前正在处理亚马逊产品数据集,并希望在名为“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_testnans_test的索引,但它们看起来是一样的。试图谷歌一个错误,但它认为,每一种情况都有它自己的特殊错误的代码

hc8w905p

hc8w905p1#

我认为你需要链接&测试的两个条件,用于按位AND和Map使用Series.map

m1 = X_test["amazon_category_and_sub_category"].isna()
m2 = X_test["manufacturer"].isin(modes.index)

nans_test = m1 & m2

X_test.loc[nans_test, "amazon_category"] = X_test.loc[nans_test, "manufacturer"].map(modes)

相关问题