我希望能够在一个 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 练习,用于处理中级机器学习类(class)中的缺失值。
X_train 是具有输入特征的 (1168,36) 数据框,y_train 是表示销售价格的 (1168,) 系列
最佳答案
当您在两者上处理相同的转换时,更简单的方法是,您可能应该将它们放在一起,直到完成清理并实际使用数据为止。
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]
或者使用差异
索引方法:
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]
注意:如果您使用 groupby
、reset_index
等操作索引,那么对索引进行切片会给您带来麻烦,因此请注意这个问题。
关于python - 根据列表从 pandas 系列中删除行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59599827/