La ciencia de datos debe tener Pandas, NumPy para la limpieza de datos

Muchos científicos de datos consideran que los pasos iniciales de adquisición y limpieza de datos representan el 80 % del trabajo, dedicando mucho tiempo a limpiar conjuntos de datos y reducirlos a una forma que se pueda usar.

Entonces, si es nuevo en el campo o planea hacerlo, es importante poder manejar datos desordenados, ya sea que contengan valores faltantes, formato inconsistente, registros mal formados o valores atípicos sin sentido.

Usaremos las bibliotecas Pandas y NumPy de Python para limpiar los datos.

inserte la descripción de la imagen aquí

Listo para trabajar

Mensaje privado o siga la cuenta oficial para responder "Fundamentos de ciencia de datos para la limpieza de datos con Pandas y NumPy" para obtener la dirección de descarga del conjunto de datos en el artículo.

Después de importar el módulo, inicie el preprocesamiento formal de datos.

import pandas as pd
import numpy as np

Eliminación de columnas de DataFrame

A menudo se encuentra que no todas las categorías de datos en el conjunto de datos son útiles. Por ejemplo, es posible que tenga un conjunto de datos con información de los estudiantes (nombre, calificación, criterios, nombres de los padres y direcciones), pero desee concentrarse en analizar las calificaciones de los estudiantes. La dirección o el nombre de los padres no es importante en este caso. Mantener estos datos no deseados ocupará un espacio innecesario.

Manipulación de datos BL-Flickr-Images-Book.csv .

df = pd.read_csv('数据科学必备Pandas、NumPy进行数据清洗/BL-Flickr-Images-Book.csv')
df.head()

inserte la descripción de la imagen aquí
Se puede ver que estas columnas no son útiles para la Mención de edición, Autor corporativo, Colaboradores corporativos, Propietario anterior, Grabador, Tipo de emisión y Marcas de estantería, por lo que se puede realizar la eliminación por lotes.

to_drop_column = [ 'Edition Statement',
		           'Corporate Author',
		           'Corporate Contributors',
		           'Former owner',
		           'Engraver',
		           'Contributors',
		           'Issuance type',
		           'Shelfmarks']

df.drop(to_drop_column , inplace=True, axis=1)
df.head()

inserte la descripción de la imagen aquí

Cambios en el índice de DataFrame

La indexación de Pandas amplía las capacidades de las matrices NumPy para permitir un corte y etiquetado más generales. En muchos casos, es útil identificar un campo con el valor único de los datos como su índice.

Obtenga el identificador único.

df['Identifier'].is_unique
True

La columna Identificador reemplaza la columna de índice.

df = df.set_index('Identifier')
df.head()

inserte la descripción de la imagen aquí
206 es la primera etiqueta del índice y se puede acceder a ella mediante la indexación basada en posiciones de df.iloc[0].

Intercalación de campos de datos de DataFrame

Limpie columnas específicas y conviértalas a un formato unificado para comprender mejor el conjunto de datos y hacer cumplir la coherencia.

Al procesar la columna Fecha de publicación , se encontró que el formato de la columna de datos no es uniforme.

df.loc[1905:, 'Date of Publication'].head(10)

Identifier
1905           1888
1929    1839, 38-54
2836           1897
2854           1865
2956        1860-63
2957           1873
3017           1866
3131           1899
4598           1814
4884           1820
Name: Date of Publication, dtype: object

Podemos usar expresiones regulares para extraer directamente 4 números consecutivos.

extr = df['Date of Publication'].str.extract(r'^(\d{4})', expand=False)
extr.head()

Identifier
206    1879
216    1868
218    1869
472    1851
480    1857
Name: Date of Publication, dtype: object

Finalmente obtenga la columna del campo numérico.

df['Date of Publication'] = pd.to_numeric(extr)

método str combinado con NumPy para limpiar columnas

df['Fecha de publicación'].str . Esta propiedad es una forma de acceder a operaciones de cadenas rápidas en Pandas que imitan en gran medida las operaciones en cadenas nativas de Python o expresiones regulares compiladas, como .split(), .replace() y .capitalize().

Para limpiar el campo Lugar de publicación, podemos combinar el método str de Pandas con la función np.where de NumPy, que es básicamente una versión vectorizada de la macro IF() de Excel.

np.where(condition, then, else)

Aquí la condición es un objeto tipo matriz o una máscara booleana. entonces es el valor a usar si la condición se evalúa como True y el valor a usar en caso contrario.

Esencialmente, .where() toma cada elemento en el objeto utilizado para la condición, verifica si ese elemento en particular se evalúa como Verdadero en el contexto de la condición y devuelve un ndarray que contiene entonces o bien, lo que corresponda. Se puede anidar dentro de declaraciones compuestas si-entonces, lo que permite que los valores se calculen en función de múltiples condiciones.

Procesar Datos del lugar de publicación .

df['Place of Publication'].head(10)

Identifier
206                                  London
216                London; Virtue & Yorston
218                                  London
472                                  London
480                                  London
481                                  London
519                                  London
667     pp. 40. G. Bryan & Co: Oxford, 1898
874                                 London]
1143                                 London
Name: Place of Publication, dtype: object

Utilice el método incluido para extraer la información de datos necesaria.

pub = df['Place of Publication']
london = pub.str.contains('London')
london[:5]

Identifier
206    True
216    True
218    True
472    True
480    True
Name: Place of Publication, dtype: bool

También se puede procesar usando np.where.

df['Place of Publication'] = np.where(london, 'London',
                                      pub.str.replace('-', ' ')))

Identifier
206                     London
216                     London
218                     London
472                     London
480                     London
                  ...         
4158088                 London
4158128                  Derby
4159563                 London
4159587    Newcastle upon Tyne
4160339                 London
Name: Place of Publication, Length: 8287, dtype: object

aplicar la función para limpiar todo el conjunto de datos

En algunos casos, aplique una función personalizada a cada celda o elemento del DataFrame. El método Pandas.apply() es similar a la función integrada map(), pero aplica la función a todos los elementos del DataFrame.

Por ejemplo, para procesar la fecha de publicación de los datos en el formato de xxxx año, puede usar apply.

def clean_date(text):
    try:
        return str(int(text)) + "年"
    except:
        return text

df["new_date"] = df["Date of Publication"].apply(clean_date)
df["new_date"] 

Identifier
206        1879216        1868218        1869472        1851480        1857...  
4158088    18384158128    18314159563      NaN
4159587    18344160339    1834
Name: new_date, Length: 8287, dtype: object

Saltar filas de DataFrame

olympics_df = pd.read_csv('数据科学必备Pandas、NumPy进行数据清洗/olympics.csv')
olympics_df.head()

inserte la descripción de la imagen aquí

Puede agregar parámetros para omitir algunas filas innecesarias al leer datos, como la fila de índice 0.

olympics_df = pd.read_csv('数据科学必备Pandas、NumPy进行数据清洗/olympics.csv',header=1)
olympics_df.head()

inserte la descripción de la imagen aquí

Columna de cambio de nombre de DataFrame

new_names =  {
    
    'Unnamed: 0': 'Country',
              '? Summer': 'Summer Olympics',
               '01 !': 'Gold',
              '02 !': 'Silver',
              '03 !': 'Bronze',
              '? Winter': 'Winter Olympics',
              '01 !.1': 'Gold.1',
              '02 !.1': 'Silver.1',
              '03 !.1': 'Bronze.1',
              '? Games': '# Games',
              '01 !.2': 'Gold.2',
              '02 !.2': 'Silver.2',
              '03 !.2': 'Bronze.2'}

olympics_df.rename(columns=new_names, inplace=True)

olympics_df.head()

inserte la descripción de la imagen aquí

Supongo que te gusta

Origin blog.csdn.net/qq_20288327/article/details/124120569
Recomendado
Clasificación