2012-07-23 18 views
6

Tengo un 200,000 x 500 dataframe cargado en Pandas. ¿Hay alguna función que pueda decirme automáticamente en qué columnas faltan datos? ¿O debo iterar sobre cada columna y verificar elemento por elemento?manejo de datos faltantes en Pandas

Una vez que he encontrado un elemento faltante, ¿cómo puedo definir una función personalizada (basada en el nombre de la columna y algunos otros datos en la misma fila) para hacer reemplazos automáticos. Veo el método fillna(), pero no creo que tome una función (lambda) como entrada.

Gracias!

Respuesta

7

algo como:

import pandas as pd 
pd.isnull(frame).any() 

es probablemente lo que usted está buscando para buscar los datos que faltan

fillna actualmente no toma las funciones lambda aunque eso es en las obras como un tema abierto en GitHub.

Puede usar DataFrame.apply para realizar un llenado personalizado por ahora. Aunque puede ser un poco más específico sobre lo que necesita hacer para completar los datos? Solo curiosidad por el caso de uso.

+0

Gracias! Lo usé para una competencia Kaggle; nos dieron un conjunto de datos con calificaciones de música de diferentes usuarios y tuvimos que construir un modelo que predecir cómo estos usuarios calificarían nuevas pistas de diferentes artistas. Una de mis características para el clasificador era ver la calificación promedio dada a un artista en particular de ese usuario específico. Pero si el usuario nunca antes había escuchado a ese artista, esa entrada aparecería como un valor perdido en Pandas. Entonces, en este caso, reemplazaría ese valor perdido con la calificación promedio dada a ese artista (una mala primera aproximación, mejor usar el SVD) – vgoklani

+0

Ah, ya veo. Supongo que tiene algo así como usuarios como índice y artista/pista como un MultiIndex de columnas. Depende del tamaño de su DataFrame, pero es posible que pueda repetir la clasificación media, por lo que es del mismo tamaño que la matriz de calificaciones y luego usar la máscara NA para reemplazar los valores perdidos. –

+0

cerrar; Hice read_csv en los datos de entrenamiento, pero no elegí un índice. Construí las características mediante el uso de las operaciones del grupo pandas, luego apliqué la media() en el grupo y, finalmente, hice una fusión de nuevo en el marco de datos principal. Algunas de las funciones usan datos de varias columnas, por lo que acabo de agruparlas con esas etiquetas de columna y luego las vuelvo a fusionar (con múltiples índices). Gracias por citar las fusiones :) Para los datos faltantes, tuve que pasar manualmente la columna y usar get_value/set_value, no es la manera más eficiente, pero funciona. – vgoklani

Cuestiones relacionadas