是否存在用于查找数字和类别列的python函数?

问题描述

从python中的pandas数据框中拆分/返回分类列和数字列的有效方法是什么?

到目前为止,我正在使用以下函数查找分类列和数字列。

def returnCatNumList(df):
    
    object_cols = list(df.select_dtypes(exclude=['int','float','int64','float64','int32','float32','int16','float16']).columns)
    numeric_cols = list(df.select_dtypes(include=['int','float16']).columns)

    return object_cols,numeric_cols

我正在寻找一种有效且更好的方法来做到这一点。任何建议或参考将不胜感激。

解决方法

您可以通过np.number代替数字dtype的列表来简化答案:

def returnCatNumList(df):
    
    object_cols = list(df.select_dtypes(exclude=np.number).columns)
    numeric_cols = list(df.select_dtypes(include=np.number).columns)

    return object_cols,numeric_cols

另一个想法是让numeric_cols使用Index.difference

def returnCatNumList(df):
    
    object_cols = list(df.select_dtypes(exclude=np.number).columns)
    numeric_cols = list(df.columns.difference(object_cols,sort=False))

    return object_cols,numeric_cols
,

您只需使用对象dtype即可实现

def returnCatNumList(df):
    
    object_cols = df.select_dtypes(include="object").columns.tolist()
    numeric_cols = df.select_dtypes(exclude="object").columns.tolist()

    return object_cols,numeric_cols
,

我们还可以使用pandas types API,它允许我们进行交互和操纵数据类型

def returnCatNumList(df):
    object_cols = []
    numeric_cols  = []

    for label,content in df.items():
        if pd.api.types.is_string_dtype(content):
            numeric_cols.append(label)
        else:
            object_cols.append(label)
    return object_cols,numeric_cols

示例:

iris = sns.load_dataset('iris')

object_cols,numeric_cols = returnCatNumList(iris)

print(object_cols)
print(numeric_cols)

输出:

>>> ['sepal_length','sepal_width','petal_length','petal_width']

>>> ['species']