根据列表从熊猫系列中删除行

时间:2020-01-05 12:26:40

标签: python pandas

我希望能够在一个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,)系列,代表销售价格

1 个答案:

答案 0 :(得分:0)

当您在两个对象上处理相同的转换时,这是一种更简单的方法,您应该将它们保持在一起,直到完成清理操作并实际使用数据为止。

x_cols = X_train.columns
y_col = y_train.name
all = pd.concat((X_train, y_train), axis=1)
all = all.dropna(subset=["GarageYrBlt"])

X_train, y_train = all.loc[:,x_cols], all.loc[:,y_col]

或者使用difference索引方法:

nan_idx = X_train.loc[X_train["GarageYrBlt"].isna()].index
notna_idx = X_train.index.difference(nan_idx)

y_train = y_train.loc[notna_idx]

N.B:如果对带有groupbyreset_index的索引进行操作,则对索引的切片会惹上您的麻烦,因此请注意该问题。