Скажем, df
это DataFrame панд. Я хочу найти все столбцы числового типа. Что-то вроде:
isNumeric = is_numeric(df)
Скажем, df
это DataFrame панд. Я хочу найти все столбцы числового типа. Что-то вроде:
isNumeric = is_numeric(df)
Ответы:
Вы можете использовать select_dtypes
метод DataFrame. Он включает два параметра: include и exclude. Итак, isNumeric будет выглядеть так:
numerics = ['int16', 'int32', 'int64', 'float16', 'float32', 'float64']
newdf = df.select_dtypes(include=numerics)
list(df.select_dtypes(include=[np.number]).columns.values)
для получения списка имен числовых столбцов
Вы можете использовать недокументированную функцию _get_numeric_data()
для фильтрации только числовых столбцов:
df._get_numeric_data()
Пример:
In [32]: data
Out[32]:
A B
0 1 s
1 2 s
2 3 s
3 4 s
In [33]: data._get_numeric_data()
Out[33]:
A
0 1
1 2
2 3
3 4
Обратите внимание, что это «частный метод» (т. Е. Деталь реализации), который может быть изменен или полностью удален в будущем. Используйте с осторожностью .
Простой однострочный ответ для создания нового фрейма данных только с числовыми столбцами:
df.select_dtypes(include=np.number)
Если вам нужны имена числовых столбцов:
df.select_dtypes(include=np.number).columns.tolist()
Полный код:
import pandas as pd
import numpy as np
df = pd.DataFrame({'A': range(7, 10),
'B': np.random.rand(3),
'C': ['foo','bar','baz'],
'D': ['who','what','when']})
df
# A B C D
# 0 7 0.704021 foo who
# 1 8 0.264025 bar what
# 2 9 0.230671 baz when
df_numerics_only = df.select_dtypes(include=np.number)
df_numerics_only
# A B
# 0 7 0.704021
# 1 8 0.264025
# 2 9 0.230671
colnames_numerics_only = df.select_dtypes(include=np.number).columns.tolist()
colnames_numerics_only
# ['A', 'B']
df.select_dtypes(include=['int64']).columns.tolist()
include=
. select_dtypes(np.number)
df.fillna(value=0, inplace=True)
df.select_dtypes(exclude=['object'])
datetime
, чем числовые,
Простой однострочный:
df.select_dtypes('number').columns
Следующие коды вернут список имен числовых столбцов набора данных.
cnames=list(marketing_train.select_dtypes(exclude=['object']).columns)
вот marketing_train
мой набор данных и select_dtypes()
функция для выбора типов данных с использованием аргументов exclude и include, а столбцы используются для извлечения имени столбца набора данных, вывод которого приведен выше:
['custAge',
'campaign',
'pdays',
'previous',
'emp.var.rate',
'cons.price.idx',
'cons.conf.idx',
'euribor3m',
'nr.employed',
'pmonths',
'pastEmail']
Спасибо
def is_type(df, baseType):
import numpy as np
import pandas as pd
test = [issubclass(np.dtype(d).type, baseType) for d in df.dtypes]
return pd.DataFrame(data = test, index = df.columns, columns = ["test"])
def is_float(df):
import numpy as np
return is_type(df, np.float)
def is_number(df):
import numpy as np
return is_type(df, np.number)
def is_integer(df):
import numpy as np
return is_type(df, np.integer)
Адаптировав этот ответ , вы могли бы сделать
df.ix[:,df.applymap(np.isreal).all(axis=0)]
Здесь np.applymap(np.isreal)
показывает, является ли каждая ячейка во фрейме данных числовой, и .axis(all=0)
проверяет, все ли значения в столбце равны True, и возвращает серию логических значений, которые можно использовать для индексации нужных столбцов.
Пожалуйста, посмотрите код ниже:
if(dataset.select_dtypes(include=[np.number]).shape[1] > 0):
display(dataset.select_dtypes(include=[np.number]).describe())
if(dataset.select_dtypes(include=[np.object]).shape[1] > 0):
display(dataset.select_dtypes(include=[np.object]).describe())
Таким образом вы можете проверить, является ли значение числовым, например, float и int или srting. второй оператор if используется для проверки строковых значений, на которые ссылается объект.
Мы можем включать и исключать типы данных в соответствии с требованиями, указанными ниже:
train.select_dtypes(include=None, exclude=None)
train.select_dtypes(include='number') #will include all the numeric types
Ссылка из Jupyter Notebook.
Чтобы выбрать все числовые типы, используйте np.number
или'number'
Чтобы выбрать строки, вы должны использовать object
dtype, но обратите внимание, что это вернет все столбцы dtype объекта
См. NumPy dtype hierarchy <http://docs.scipy.org/doc/numpy/reference/arrays.scalars.html>
__
Для выбора DateTimes, использование np.datetime64
, 'datetime'
или
'datetime64'
Чтобы выбрать timedeltas, используйте np.timedelta64
, 'timedelta'
или
'timedelta64'
Чтобы выбрать категориальные типы Pandas, используйте 'category'
Чтобы выбрать типы данных Pandas datetimetz, используйте 'datetimetz'
(новое в 0.20.0) или 'datetime64 [ns, tz]'
dtype
былobject
, но все элементы являются числовыми, как числовыми или нет. Если нет, возьмите ответ Ханана, он тоже быстрее. В противном случае возьмите мою.