2012-10-04 26 views
29

En mi solicitud me cargan archivos de texto que se estructuran de la siguiente manera:gota columnas no numéricos de una trama de datos pandas

  • En primer lugar no columna numérica (ID)
  • un número de columnas no numéricos (cadenas)
  • Un número de columnas numéricas (flotadores)

El número de las columnas no numéricos es variable. Actualmente me carga los datos en una trama de datos de esta manera:

source = pandas.read_table(inputfile, index_col=0) 

quisiera dejar caer todas las columnas no numéricos de un solo golpe, sin saber sus nombres o índices, ya que esto podría ser factible la lectura de su dtype. ¿Es esto posible con los pandas o tengo que cocinar algo solo?

+0

relacionadas: http://stackoverflow.com/q/25039626/5069869 – TheEspinosa

Respuesta

24

evitar el uso de un método privado también puede utilizar select_dtypes, donde se pueden incluir o excluir los dtypes usted quiere.

Se ejecutó en this post en exactamente lo mismo.

o en su caso, en concreto:
source.select_dtypes(['number']) or source.select_dtypes([np.number]

+1

Creo que esto es mejor que usar el método privado. Tal vez deberías agregar la respuesta directa a la pregunta, que es: source.select_dtypes (['number']) o source.select_dtypes ([numpy.number]) – hardsetting

+0

Esta debería ser la respuesta aceptada, aunque la otra también funcionará , esto es más correcto, sin mencionar que el método privado, al no ser parte de la API, podría cambiar en cualquier momento –

+0

¿Esto no devuelve booleanos? También, ¿cuál es la diferencia entre 'number' y np.number (solo una numpy matriz de números?) – Worthy7

29

método privado `SA, pero va a hacer el truco: source._get_numeric_data()

In [2]: import pandas as pd 

In [3]: source = pd.DataFrame({'A': ['foo', 'bar'], 'B': [1, 2], 'C': [(1,2), (3,4)]}) 

In [4]: source 
Out[4]: 
    A B  C 
0 foo 1 (1, 2) 
1 bar 2 (3, 4) 

In [5]: source._get_numeric_data() 
Out[5]: 
    B 
0 1 
1 2 
+0

Gracias, funciona bastante bien. – Einar

+0

Gracias! ¿Hay alguna precaución al usar "métodos privados" en los pandas? O, como alternativa, ¿por qué es esto privado? (Puedo abrir una nueva pregunta, si sugiere) –

+0

En general, agregar/eliminar/cambiar-api de un método privado no se considera una clase (api)/cambio de comportamiento. En otras palabras, una nueva versión de pandas que se considere compatible con versiones anteriores podría, por ejemplo, eliminar un método privado. Creo que _get_numeric_data() se usa principalmente para soportar funciones/métodos de trazado. Si crees que este es un método útil, puedes hacer una solicitud de función en github pidiéndole que la haga parte de la API pública. –

Cuestiones relacionadas