我有很多分类列,例如:
df = pd.DataFrame(
data={
"id": [1, 2, 3, 4],
"category1": [" ",
"data",
"more data",
" "],
"category2": [" ", "more data", " ", "and more"],
}
)
df["category1"] = df["category1"].astype("category")
df["category2"] = df["category2"].astype("category")
我想删除任何级别的只有空格的分类类型列,同时确保它们保留类别(换句话说不能使用
.str
)。我试过:
cat_cols = df.select_dtypes("category").columns
for c in cat_cols:
levels = [level for level in df[c].cat.categories.values.tolist()
if level.isspace()]
df[c] = df[c].cat.remove_categories(levels)
这行得通,所以我尝试通过列表理解使其更快更整洁:
df[cat_cols] = [df[c].cat.remove_categories(
[level for level in df[c].cat.categories.values.tolist()
if level.isspace()])
for c in cat_cols]
此时我得到“ValueError:列的长度必须与键相同”
注意,我不想在 list-comp 中使用
inplace
参数,因为它会被 pd.Categorical
弃用。
感觉我可能在这里遗漏了一些基本的东西,但是我如何通过列表理解来做到这一点而不使用
inplace
?