我想找一个熊猫专栏的分类。我可以得到类型,但我很难找出类别。
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
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,则不会将任何列标识为分类列。为了获得最佳效果,您必须调整大小数据流的比例。
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。