Você deve especificar se uma coluna que tem dtypede ser object, 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.
FooBar
O que acontece se você simplesmente tentar as colunas df.describe (). Em seguida, atribua-o a uma variável.
Coldy
Respostas:
146
Você pode usar o select_dtypesmétodo de DataFrame. Inclui dois parâmetros incluem e excluem. Portanto, isNumeric seria semelhante a:
Você pode usar df.select_dtypes (include = [np.number]) se não precisar especificar uma lista '
numérica
23
Com base na dica do comentário anterior (+1), você poderia usar apenas list(df.select_dtypes(include=[np.number]).columns.values) para obter uma lista de nomes das colunas numéricas
user799188
76
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
01 s
12 s
23 s
34 s
In[33]: data._get_numeric_data()Out[33]:
A
01122334
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 .
Não, isso não está documentado em lugar nenhum. A implementação está aqui , no entanto, como @ijoseph mencionou, eu seria cauteloso ao usar métodos que começam com sublinhados, pois eles são pouco mais do que detalhes de implementação. Use literalmente QUALQUER outra resposta além desta.
cs95 de
Exatamente. Como prática recomendada, tento usar e converter o máximo possível de métodos numpy. Isso se deve ao dinamismo dos pandas. A API muda com freqüência. Para métodos não documentados, é simplesmente imprudente, não importa o quão útil seja.
mik
69
Resposta simples de uma linha para criar um novo dataframe com apenas colunas numéricas:
Se você deseja apenas um tipo, não precisa armazená-lo em uma lista. Nem você precisa especificar include=. select_dtypes(np.number)
BallpointBen
Se suas colunas possuem dados numéricos, mas também nenhum, o dtype pode ser 'objeto'. Isso forçará as colunas a ser numéricas:df.fillna(value=0, inplace=True)
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:
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)
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.
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.
dtype
de 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.Respostas:
Você pode usar o
select_dtypes
método de DataFrame. Inclui dois parâmetros incluem e excluem. Portanto, isNumeric seria semelhante a:fonte
list(df.select_dtypes(include=[np.number]).columns.values)
para obter uma lista de nomes das colunas numéricasVocê pode usar a função não documentada
_get_numeric_data()
para filtrar apenas colunas numéricas:Exemplo:
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 .
fonte
Resposta simples de uma linha para criar um novo dataframe com apenas colunas numéricas:
Se você quiser os nomes das colunas numéricas:
Código completo:
fonte
df.select_dtypes(include=['int64']).columns.tolist()
include=
.select_dtypes(np.number)
df.fillna(value=0, inplace=True)
fonte
datetime
e não são numéricosOne-liner simples:
fonte
Os códigos a seguir retornarão uma lista de nomes das colunas numéricas de um conjunto de dados.
aqui
marketing_train
está meu conjunto de dados eselect_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:obrigado
fonte
Este é outro código simples para encontrar colunas numéricas no quadro de dados do pandas,
fonte
fonte
Adaptando esta resposta , você poderia fazer
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.fonte
Por favor, veja o código abaixo:
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.
fonte
Podemos incluir e excluir tipos de dados de acordo com os requisitos abaixo:
Referido do Jupyter Notebook.
Para selecionar todos os tipos numéricos , use
np.number
ou'number'
Para selecionar as strings você deve usar o
object
dtype mas note que isso irá retornar todas as colunas do objeto dtypeVeja 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]'fonte