python - 根据列表从 pandas 系列中删除行

标签 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 练习,用于处理中级机器学习类(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]

注意:如果您使用 groupbyreset_index 等操作索引,那么对索引进行切片会给您带来麻烦,因此请注意这个问题。

关于python - 根据列表从 pandas 系列中删除行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59599827/

相关文章:

python - 比较 Pandas 中的相对开始日期

python - 将 pandas 数据帧行拆分为搜索到的列值到新的数据帧中

python - Tornado websocket 模型

python - 如何测试 View 是否装饰有 "login_required"(Django)

python - pyopengl设置多 channel 纹理混合模式

python - Pandas date_range 只有小时、分钟和秒

python - 应用 "group by"后选择第一个或最后一个 n 组

python - 为什么这个扭曲的服务器会与进程错误地交互?

python - Tablib xlsx 文件 badZip 文件问题

pandas - 重复 pandas 数据框中的行并连续更改列值