Debe especificar si una columna que tiene dtypeser object, pero todos los elementos son numéricos, cuenta como numérica o no. Si no, tome la respuesta de Hanan, ya que también es más rápido. De lo contrario, toma el mío.
FooBar
¿Qué sucede si simplemente prueba las columnas df.describe (). Luego asígnelo a una variable.
frío
Respuestas:
146
Puede utilizar el select_dtypesmétodo de DataFrame. Incluye dos parámetros incluir y excluir. Entonces isNumeric se vería así:
Puede usar df.select_dtypes (include = [np.number]) si no necesita especificar una lista de 'numéricos'
KieranPC
23
Sobre la base de la sugerencia del comentario anterior (+1), podría usar list(df.select_dtypes(include=[np.number]).columns.values) para obtener una lista de nombres de las columnas numéricas
usuario799188
76
Puede usar la función no documentada _get_numeric_data()para filtrar solo columnas numéricas:
df._get_numeric_data()
Ejemplo:
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
Tenga en cuenta que este es un "método privado" (es decir, un detalle de implementación) y está sujeto a cambios o eliminación total en el futuro. Úselo con precaución .
No, esto no está documentado en ninguna parte. La implementación está aquí , sin embargo, como @ijoseph mencionó, sería cauteloso al usar métodos que comienzan con guiones bajos, ya que son poco más que detalles de implementación. Use literalmente CUALQUIER otra respuesta además de esta.
cs95
Exactamente. Como mejor práctica, trato de usar y convertir a tantos métodos numpy como sea posible. Esto se debe al dinamismo de los pandas. La API cambia con frecuencia. Para los métodos indocumentados es simplemente imprudente, sin importar cuán útil sea.
mik
69
Respuesta simple de una línea para crear un nuevo marco de datos con solo columnas numéricas:
Si solo desea un tipo, no es necesario que lo almacene en una lista. Tampoco es necesario especificar include=. select_dtypes(np.number)
BallpointBen
Si sus columnas tienen datos numéricos pero también Ninguno, el tipo d podría ser 'objeto'. Esto obligará a las columnas a ser numéricas:df.fillna(value=0, inplace=True)
aquí marketing_trainestá mi conjunto de datos y la select_dtypes()función para seleccionar tipos de datos usando excluir e incluir argumentos y columnas se usa para buscar el nombre de columna del conjunto de datos, la salida del código anterior será la siguiente:
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)
Aquí, np.applymap(np.isreal)muestra si todas las celdas del marco de datos son numéricas y .axis(all=0)comprueba si todos los valores de una columna son verdaderos y devuelve una serie de valores booleanos que se pueden usar para indexar las columnas deseadas.
De esta manera, puede verificar si los valores son numéricos como float e int o los valores srting. la segunda instrucción if se usa para verificar los valores de cadena a los que hace referencia el objeto.
dtype
serobject
, pero todos los elementos son numéricos, cuenta como numérica o no. Si no, tome la respuesta de Hanan, ya que también es más rápido. De lo contrario, toma el mío.Respuestas:
Puede utilizar el
select_dtypes
método de DataFrame. Incluye dos parámetros incluir y excluir. Entonces isNumeric se vería así:fuente
list(df.select_dtypes(include=[np.number]).columns.values)
para obtener una lista de nombres de las columnas numéricasPuede usar la función no documentada
_get_numeric_data()
para filtrar solo columnas numéricas:Ejemplo:
Tenga en cuenta que este es un "método privado" (es decir, un detalle de implementación) y está sujeto a cambios o eliminación total en el futuro. Úselo con precaución .
fuente
Respuesta simple de una línea para crear un nuevo marco de datos con solo columnas numéricas:
Si desea los nombres de las columnas numéricas:
Código completo:
fuente
df.select_dtypes(include=['int64']).columns.tolist()
include=
.select_dtypes(np.number)
df.fillna(value=0, inplace=True)
fuente
datetime
que no son tipos numéricosDe una sola línea simple:
fuente
Los siguientes códigos devolverán una lista de nombres de las columnas numéricas de un conjunto de datos.
aquí
marketing_train
está mi conjunto de datos y laselect_dtypes()
función para seleccionar tipos de datos usando excluir e incluir argumentos y columnas se usa para buscar el nombre de columna del conjunto de datos, la salida del código anterior será la siguiente:Gracias
fuente
Este es otro código simple para encontrar columnas numéricas en el marco de datos de pandas,
fuente
fuente
Adaptando esta respuesta , podrías hacer
Aquí,
np.applymap(np.isreal)
muestra si todas las celdas del marco de datos son numéricas y.axis(all=0)
comprueba si todos los valores de una columna son verdaderos y devuelve una serie de valores booleanos que se pueden usar para indexar las columnas deseadas.fuente
Consulte el siguiente código:
De esta manera, puede verificar si los valores son numéricos como float e int o los valores srting. la segunda instrucción if se usa para verificar los valores de cadena a los que hace referencia el objeto.
fuente
Podemos incluir y excluir tipos de datos según el requisito de la siguiente manera:
Referido de Jupyter Notebook.
Para seleccionar todos los tipos numéricos , utilice
np.number
o'number'
Para seleccionar cadenas, debe usar
object
dtype, pero tenga en cuenta que esto devolverá todas las columnas de dtype de objetoVer el
NumPy dtype hierarchy <http://docs.scipy.org/doc/numpy/reference/arrays.scalars.html>
__Para seleccionar datetimes, uso
np.datetime64
,'datetime'
o'datetime64'
Para seleccionar timedeltas, uso
np.timedelta64
,'timedelta'
o'timedelta64'
Para seleccionar tipos categóricos de Pandas, use
'category'
Para seleccionar los tipos de fecha y hora de Pandas, use
'datetimetz'
(nuevo en 0.20.0) o `` 'datetime64 [ns, tz]'fuente