当您在数据帧上运行get_dummies时,有没有好的方法来创建列名.例如,

import pandas as pd

# set up a dataframe with one numeric and two categocial columns
df = pd.DataFrame({
    "numeric_1": [1, 2, 3, 4],
    "cat_1": ['high', 'low', 'high', 'low'],
    "cat_2": ['blue', 'blue', 'green', 'green']
})

# identify the categorical columns
categorical_colnames = ['cat_1', 'cat_2']

# get dummies
df = pd.get_dummies(df, categorical_colnames)

对于此数据帧,我希望看到:

[‘CAT_1_High’,‘CAT_1_Low’,‘CAT_2_Blue’,‘CAT_2_Green’]

我用来做这件事的代码很笨重,我想知道有没有更好的.我搜索了文档,似乎没有当你运行pd.get_dummies时返回它的选项.以下是我使用的代码:

nominal_prefixes = [s + "_" for s in categorical_colnames]
nominal_colnames = []
for x in nominal_prefixes:
    cols_x = [col for col in df if col.startswith(x)]
    nominal_colnames.append(cols_x)

nominal_colnames = [item for sublist in nominal_colnames for item in sublist]

对于nominal_colnames,我创建了我想要的 list ,但这很笨重,我希望有更好的东西.我不得不在我的代码中经常这样做,我想其他Pandas 用户也会这样做.我认为this question是类似的,但它没有回答我的问题.

推荐答案

只需按列前缀进行筛选:

nominal_colnames = df.columns[df.columns.str.startswith('cat_')].values

如果需要精确的前缀,请传递列名的元组:

nominal_colnames = (df.columns[df.columns.str
                    .startswith(tuple(categorical_colnames))].values)

['cat_1_high' 'cat_1_low' 'cat_2_blue' 'cat_2_green']

Python相关问答推荐

在Python中,如何初始化集合列表脚本的输出

为什么我的代码会进入无限循环?

自动编码器和极坐标

自定义新元未更新参数

如何使用没有Selenium的Python在百思买着陆页面上处理国家/地区 Select ?

如何检测背景有噪的图像中的正方形

使用miniconda创建环境的问题

如何获取TFIDF Transformer中的值?

如何将Docker内部运行的mariadb与主机上Docker外部运行的Python脚本连接起来

PyQt5,如何使每个对象的 colored颜色 不同?'

DataFrames与NaN的条件乘法

如何从pandas的rame类继承并使用filepath实例化

移动条情节旁边的半小提琴情节在海运

转换为浮点,pandas字符串列,混合千和十进制分隔符

当我try 在django中更新模型时,模型表单数据不可见

Django RawSQL注释字段

在matplotlib中删除子图之间的间隙_mosaic

lityter不让我输入左边的方括号,'

寻找Regex模式返回与我当前函数类似的结果

Python避免mypy在相互引用中从另一个类重定义类时失败