Digamos que dfseja um DataFrame do pandas. Eu gostaria de encontrar todas as colunas do tipo numérico. Algo como:
isNumeric = is_numeric(df)
Digamos que dfseja um DataFrame do pandas. Eu gostaria de encontrar todas as colunas do tipo numérico. Algo como:
isNumeric = is_numeric(df)
Respostas:
Você pode usar o select_dtypesmétodo de DataFrame. Inclui dois parâmetros incluem e excluem. Portanto, isNumeric seria semelhante a:
numerics = ['int16', 'int32', 'int64', 'float16', 'float32', 'float64']
newdf = df.select_dtypes(include=numerics)
list(df.select_dtypes(include=[np.number]).columns.values) para obter uma lista de nomes das colunas numéricas
Você pode usar a função não documentada _get_numeric_data()para filtrar apenas colunas numéricas:
df._get_numeric_data()
Exemplo:
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
Observe que este é um "método privado" (ou seja, um detalhe de implementação) e está sujeito a alterações ou remoção total no futuro. Use com cuidado .
Resposta simples de uma linha para criar um novo dataframe com apenas colunas numéricas:
df.select_dtypes(include=np.number)
Se você quiser os nomes das colunas numéricas:
df.select_dtypes(include=np.number).columns.tolist()
Código completo:
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'])
datetimee não são numéricos
One-liner simples:
df.select_dtypes('number').columns
Os códigos a seguir retornarão uma lista de nomes das colunas numéricas de um conjunto de dados.
cnames=list(marketing_train.select_dtypes(exclude=['object']).columns)
aqui marketing_trainestá meu conjunto de dados e select_dtypes()é uma função para selecionar tipos de dados usando argumentos de exclusão e inclusão e colunas é usado para buscar o nome da coluna de saída do conjunto de dados do código acima será o seguinte:
['custAge',
'campaign',
'pdays',
'previous',
'emp.var.rate',
'cons.price.idx',
'cons.conf.idx',
'euribor3m',
'nr.employed',
'pmonths',
'pastEmail']
obrigado
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)
Adaptando esta resposta , você poderia fazer
df.ix[:,df.applymap(np.isreal).all(axis=0)]
Aqui, np.applymap(np.isreal)mostra se cada célula no quadro de dados é numérica e .axis(all=0)verifica se todos os valores em uma coluna são Verdadeiros e retorna uma série de Booleanos que podem ser usados para indexar as colunas desejadas.
Por favor, veja o código abaixo:
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())
Dessa forma, você pode verificar se os valores são numéricos, como float e int ou os valores srting. a segunda instrução if é usada para verificar os valores de string que são referidos pelo objeto.
Podemos incluir e excluir tipos de dados de acordo com os requisitos abaixo:
train.select_dtypes(include=None, exclude=None)
train.select_dtypes(include='number') #will include all the numeric types
Referido do Jupyter Notebook.
Para selecionar todos os tipos numéricos , use np.numberou'number'
Para selecionar as strings você deve usar o objectdtype mas note que isso irá retornar todas as colunas do objeto dtype
Veja o NumPy dtype hierarchy <http://docs.scipy.org/doc/numpy/reference/arrays.scalars.html>__
Para selecionar datas, use np.datetime64, 'datetime'ou
'datetime64'
Para selecionar timedeltas, use np.timedelta64, 'timedelta'ou
'timedelta64'
Para selecionar dtipos categóricos do Pandas, use 'category'
Para selecionar os dtipos datetimetz do Pandas, use 'datetimetz'(novo no 0.20.0) ou `` 'datetime64 [ns, tz]'
dtypede serobject, mas todos os elementos sendo numérico, conta como numérico ou não. Se não, aceite a resposta de Hanan, pois também é mais rápida. Caso contrário, pegue o meu.