Проверьте, какие столбцы в DataFrame являются категориальными
Я новичок в Pandas... Я хочу простой и общий способ найти, какие столбцы являются categorical
в моем DataFrame
, когда я не указываю вручную каждый тип столбца, в отличие от этого вопроса SO. df
создается с помощью:
import pandas as pd
df = pd.read_csv("test.csv", header=None)
например
0 1 2 3 4
0 1.539240 0.423437 -0.687014 Chicago Safari
1 0.815336 0.913623 1.800160 Boston Safari
2 0.821214 -0.824839 0.483724 New York Safari
,
ОБНОВЛЕНИЕ (2018/02/04) Вопрос предполагает, что числовые столбцы НЕ являются категориальными, @Zero принятый ответ решает это.
БУДЬТЕ ОСТОРОЖНЫ - Как отмечает @Sagarkar, это не всегда так. Сложность заключается в том, что типы данных и категориальные/порядковые/номинальные типы являются ортогональными понятиями, поэтому сопоставление между ними не является простым. @Джефф ответ ниже указывает точный способ достижения ручного отображения.
Ответы
Ответ 1
Вы можете использовать df._get_numeric_data()
, чтобы получить числовые столбцы, а затем узнать категориальные столбцы
In [66]: cols = df.columns
In [67]: num_cols = df._get_numeric_data().columns
In [68]: num_cols
Out[68]: Index([u'0', u'1', u'2'], dtype='object')
In [69]: list(set(cols) - set(num_cols))
Out[69]: ['3', '4']
Ответ 2
Я нашел способ обновления до Pandas v0.16.0, а затем исключил число dtypes с помощью:
df.select_dtypes(exclude=["number","bool_","object_"])
Что работает, если типы не изменены и больше не добавляются в NumPy. Предложение в комментариях к вопросу @Jeff предлагает include=["category"]
, но это, похоже, не сработало.
NumPy Types: ссылка
![Numpy Types]()
Ответ 3
Для потомков. Канонический метод выбора dtypes .select_dtypes
. Вы можете указать фактический numpy dtype или convertible или категорию, которая не является numpy dtype.
In [1]: df = DataFrame({'A' : Series(range(3)).astype('category'), 'B' : range(3), 'C' : list('abc'), 'D' : np.random.randn(3) })
In [2]: df
Out[2]:
A B C D
0 0 0 a 0.141296
1 1 1 b 0.939059
2 2 2 c -2.305019
In [3]: df.select_dtypes(include=['category'])
Out[3]:
A
0 0
1 1
2 2
In [4]: df.select_dtypes(include=['object'])
Out[4]:
C
0 a
1 b
2 c
In [5]: df.select_dtypes(include=['object']).dtypes
Out[5]:
C object
dtype: object
In [6]: df.select_dtypes(include=['category','int']).dtypes
Out[6]:
A category
B int64
dtype: object
In [7]: df.select_dtypes(include=['category','int','float']).dtypes
Out[7]:
A category
B int64
D float64
dtype: object
Ответ 4
Используйте .dtypes
In [10]: df.dtypes
Out[10]:
0 float64
1 float64
2 float64
3 object
4 object
dtype: object
Ответ 5
numeric_var = [key for key in dict(df.dtypes)
if dict(pd.dtypes)[key]
in ['float64','float32','int32','int64']] # Numeric Variable
cat_var = [key for key in dict(df.dtypes)
if dict(df.dtypes)[key] in ['object'] ] # Categorical Varible
Ответ 6
Вы можете получить список категориальных столбцов, используя этот код:
dfName.select_dtypes(exclude=['int', 'float']).columns
И интуитивно для числовых столбцов:
dfName.select_dtypes(include=['int', 'float']).columns
Надеюсь, это поможет.
Ответ 7
Это даст массив всех категориальных переменных в кадре данных.
dataset.select_dtypes(include=['O']).columns.values
Ответ 8
# Import packages
import numpy as np
import pandas as pd
# Data
df = pd.DataFrame({"Country" : ["France", "Spain", "Germany", "Spain", "Germany", "France"],
"Age" : [34, 27, 30, 32, 42, 30],
"Purchased" : ["No", "Yes", "No", "No", "Yes", "Yes"]})
df
Out[1]:
Country Age Purchased
0 France 34 No
1 Spain 27 Yes
2 Germany 30 No
3 Spain 32 No
4 Germany 42 Yes
5 France 30 Yes
# Checking data type
df.dtypes
Out[2]:
Country object
Age int64
Purchased object
dtype: object
# Saving CATEGORICAL Variables
cat_col = [c for i, c in enumerate(df.columns) if df.dtypes[i] in [np.object]]
cat_col
Out[3]: ['Country', 'Purchased']
Ответ 9
Используйте pandas.DataFrame.select_dtypes. Существуют категориальные dtypes, которые можно найти с помощью флага "категорический". Для строк вы можете использовать объект типа dumpy
Дополнительная информация: https://pandas.pydata.org/pandas-docs/stable/generated/pandas.DataFrame.select_dtypes.html
Exemple:
import pandas as pd
df = pd.DataFrame({'Integer': [1, 2] * 3,'Bool': [True, False] * 3,'Float': [1.0, 2.0] * 3,'String': ['Dog', 'Cat'] * 3})
df
Out[1]:
Integer Bool Float String
0 1 True 1.0 Dog
1 2 False 2.0 Cat
2 1 True 1.0 Dog
3 2 False 2.0 Cat
4 1 True 1.0 Dog
5 2 False 2.0 Cat
df.select_dtypes(include=['category', object]).columns
Out[2]:
Index(['String'], dtype='object')
Ответ 10
'
выберите категориальные имена столбцов
cat_features = [i для я в df.columns, если df.dtypes [i] == 'object'] '