开发者社区> 问答> 正文

如何自动检测冒号是否属于范畴?

我想找一个熊猫专栏的分类。我可以得到类型,但我很难找出类别。

titanic_df = pd.read_csv('http://biostat.mc.vanderbilt.edu/wiki/pub/Main/DataSets/titanic3.csv')

#ID datatype

def idDataTypes(inputDataFrame):
    columnTypesDict = {} 
    import numpy as np
    import numbers
    import pandas as pd
    from pandas.api.types import is_string_dtype
    from pandas.api.types import is_numeric_dtype

    for columns in inputDataFrame.columns.values:
        #print(columns)
        #try to convert to number. If it doesn't work it will convert to another type
        try:
            inputDataFrame[columns] = pd.to_numeric(inputDataFrame[columns], errors='ignore').apply(lambda x: x + 1 if isinstance(x, numbers.Number) else x) 
        except:
            print(columns, " cannot convert.")
        #print(inputDataFrame[columns].dtype)

        #create dictionary with the label
        if is_numeric_dtype(inputDataFrame[columns]): #products[columns].dtype == np.float64:
            columnTypesDict[columns] = "numeric"
        elif is_string_dtype(inputDataFrame[columns]): # products[columns].dtype == np.object:
            columnTypesDict[columns] = "string"
            #print(is_string_dtype(products[columns]))
        else:
            print("something else", prinputDataFrameoducts[columns].dtype)

    #category 
    cols = inputDataFrame.columns
    num_cols = inputDataFrame._get_numeric_data().columns
    #num_cols
    proposedCategory = list(set(cols) - set(num_cols))
    for value in proposedCategory:
        columnTypesDict[value] = "category"

    return(columnTypesDict)

idDataTypes(titanic_df)

我得到的结果不是我想要的:

{'pclass': 'numeric',
 'survived': 'numeric',
 'name': 'category',
 'sex': 'category',
 'age': 'numeric',
 'sibsp': 'numeric',
 'parch': 'numeric',
 'ticket': 'category',
 'fare': 'numeric',
 'cabin': 'category',
 'embarked': 'category',
 'boat': 'category',
 'body': 'numeric',
 'home.dest': 'category'}

pclass应该是一个类别,而名称不应该是。 我不知道如何评估某物是否是一个类别。什么好主意吗? 问题来源StackOverflow 地址:/questions/59384802/how-can-i-automatically-detect-if-a-colum-is-categorical

展开
收起
kun坤 2019-12-26 14:29:47 400 0
1 条回答
写回答
取消 提交回答
  • proposedCategory = list(set(cols) - set(num_cols))
    

    除了数字列之外的所有内容都将成为类别。 也没有正确的方法来做到这一点,因为一个列是否是分类的,最好是根据列中包含的数据来手动决定。你试图自动地做这件事。一种方法是计算列中惟一值的数目。如果有相对较少的唯一值,则列可能是分类的。

    #category 
    for name, column in inputDataFrame.iteritems():
        unique_count = column.unique().shape[0]
        total_count = column.shape[0]
        if unique_count / total_count < 0.05:
            columnTypesDict[name] = 'category'
    

    5%的阈值是随机的。如果dataframe中的行数少于20,则不会将任何列标识为分类列。为了获得最佳效果,您必须调整大小数据流的比例。

    2019-12-26 14:29:54
    赞同 展开评论 打赏
问答分类:
问答地址:
问答排行榜
最热
最新

相关电子书

更多
封闭的冲突与开放的和平 立即下载
改善弱网络-探索移动互联网下弱网络处理方式 立即下载
低代码开发师(初级)实战教程 立即下载

相关实验场景

更多