pandas categorical 从多个列中删除类别

问题描述 投票:0回答:0

我有很多分类列,例如:

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

pandas list-comprehension
© www.soinside.com 2019 - 2024. All rights reserved.