【发布时间】:2020-01-06 00:03:19
【问题描述】:
我希望能够在一个 df 中生成索引 NaN 值的列表,然后使用该列表删除一系列中的相应行。目标是让 df 和系列具有相同的行数
但是我一直卡在最后一部分。如果我使用 drop() 我不会出现轴错误。我试过 isin() 但我似乎没有得到正确的结果
#create list of index of nan values in Garageyrblt
Index_nan_train = X_train[X_train['GarageYrBlt'].isna()].index.tolist()
# drop nan in garageyrblt X_train
X_train = X_train.drop(subset = ['GarageYrBlt'], axis = 0)
# use list to drop nan in garageyrblt Y_train
y_train = y_train.drop(['Index_nan_train'], axis = 0)
编辑:要添加更多详细信息,数据来自 kaggle 练习,用于处理中级机器学习课程中的缺失值。
X_train 是具有输入特征的 (1168,36) 数据框,y_train 是 (1168,) 系列,代表销售价格
【问题讨论】:
-
X_train 是一个数据帧。 y_train 似乎没有定义。您不能从 DataFrame 中删除单独定义的对象(在本例中为列表)。尝试提供 MCVE 以获得更好的帮助机会:stackoverflow.com/help/minimal-reproducible-example
-
您是否尝试使用布尔掩码?类似
y_train = y_train[~Index_nan_train] -
我刚试过,得到 TypeError: bad operand type for unary ~: 'list'
-
啊,是的,我记得掩码本身应该是
numpy.ndarray。所以这个丑陋的解决方法就像:Index_nan_train = np.ndarray(Index_nan_train)_train = y_train[~Index_nan_train]