Categorías
Python

Itertools en Python 3, Por Ejemplo

 

Índice Columnas

  • cayendo en una trama de datos
  • Cambio del Índice de trama de datos
  • ordenar campos en los datos
  • Combinación de métodos str con NumPy a columnas limpias
  • limpieza de todo el conjunto de datos Uso de la función applymap
  • Cambiar el nombre de columnas y filas que saltan
  • Python de datos limpieza: Recapitulación y científicos Recursos

datos pasan una gran cantidad de su tiempo de limpiar los conjuntos de datos y lograr que se reduce a una forma con la que pueden trabajar. De hecho, una gran cantidad de datos científicos sostienen que las medidas iniciales de obtención y limpieza de datos constituyen el 80% del trabajo.

Por lo tanto, si usted está entrando en este campo o tiene intención de paso en este campo, es importante ser capaz de tratar con datos desordenado, ya que los valores medios, de formato incompatible, registros con formato incorrecto o valores atípicos sin sentido que falta.

En este tutorial, vamos a aprovechar las bibliotecas pandas y NumPy de Python de datos limpios.

vamos a cubrir las siguientes: columnas innecesarias

  • cayendo en una trama de datos
  • Cambiar el índice de una trama de datos
  • Usando .str () para columnas limpias
  • Uso de la función DataFrame.applymap () para limpiar el todo conjunto de datos, elemento a elemento columnas
  • Cambiar el nombre a un conjunto más reconocible de etiquetas
  • Skipping filas innecesarias en un archivo CSV Bono

gratuito: Haga clic aquí para obtener acceso a una Guía de Recursos libre NumPy que señala al mejores tutoriales, videos y libros para mejorar sus habilidades NumPy.

Aquí son los conjuntos de datos que vamos a utilizar:

  • BL-Flickr-Images-Book.csv – Un archivo CSV que contiene información sobre los libros de la Biblioteca Británica
  • university_towns.txt – Un archivo de texto que contiene los nombres de ciudades de la universidad en todos los estados de Estados Unidos
  • olympics.csv – Un archivo CSV que resume la participación de todos los países de la Juegos Olímpicos de verano y de invierno

se puede descargar las bases de datos del repositorio GitHub del real Python con el fin de seguir los ejemplos Here.

Nota : recomiendo el uso de Jupyter Nota libros para seguir adelante.

Este tutorial asume un conocimiento básico de las bibliotecas pandas y NumPy, incluyendo caballo de batalla de Panda Series y trama de datos de objetos, métodos comunes que se pueden aplicar a estos objetos, y la familiaridad con valores NaN de NumPy. importación de

dejar que los módulos necesarios y empezar! Columnas

>>> import pandas as pd
>>> import numpy as np

cayendo en una trama de datos

A menudo, usted encontrará que no todas las categorías de datos en un conjunto de datos son útiles para usted. Por ejemplo, es posible que tenga un conjunto de datos que contiene la información del estudiante (nombre, grado, de serie, nombre de los padres, y dirección), pero que centrarse en el análisis de las calificaciones del estudiante.

En este caso, la dirección de los padres o los nombres de categorías no son importantes para usted. Conservando estas categorías que no sean necesarios ocupará espacio innecesario y potencialmente también empantanar el tiempo de ejecución.

pandas proporciona una forma práctica de eliminar columnas o filas no deseados de una trama de datos con la función de gota (). Echemos un vistazo a un ejemplo sencillo donde dejamos caer una serie de columnas de una trama de datos.

En primer lugar, vamos a crear una trama de datos del archivo CSV ‘BL-Flickr-Imágenes-Book.csv’. En los ejemplos a continuación, se pasa una ruta relativa a pd.read_csv, lo que significa que todos los conjuntos de datos se encuentran en una carpeta con el nombre Los conjuntos de datos en nuestro directorio de trabajo actual:

>>> df = pd.read_csv('Datasets/BL-Flickr-Images-Book.csv')
>>> df.head()

Identifier Edition Statement Place of Publication \
0 206 NaN London
1 216 NaN London; Virtue & Yorston
2 218 NaN London
3 472 NaN London
4 480 A new edition, revised, etc. London

Date of Publication Publisher \
0 1879 [1878] S. Tinsley & Co.
1 1868 Virtue & Co.
2 1869 Bradbury, Evans & Co.
3 1851 James Darling
4 1857 Wertheim & Macintosh

Title Author \
0 Walter Forbes. [A novel.] By A. A A. A.
1 All for Greed. [A novel. The dedication signed... A., A. A.
2 Love the Avenger. By the author of “All for Gr... A., A. A.
3 Welsh Sketches, chiefly ecclesiastical, to the... A., E. S.
4 [The World in which I live, and my place in it... A., E. S.

Contributors Corporate Author \
0 FORBES, Walter. NaN
1 BLAZE DE BURY, Marie Pauline Rose - Baroness NaN
2 BLAZE DE BURY, Marie Pauline Rose - Baroness NaN
3 Appleyard, Ernest Silvanus. NaN
4 BROOME, John Henry. NaN

Corporate Contributors Former owner Engraver Issuance type \
0 NaN NaN NaN monographic
1 NaN NaN NaN monographic
2 NaN NaN NaN monographic
3 NaN NaN NaN monographic
4 NaN NaN NaN monographic

Flickr URL \
0 http://www.flickr.com/photos/britishlibrarya...
1 http://www.flickr.com/photos/britishlibrarya...
2 http://www.flickr.com/photos/britishlibrarya...
3 http://www.flickr.com/photos/britishlibrarya...
4 http://www.flickr.com/photos/britishlibrarya...

Shelfmarks
0 British Library HMNTS 12641.b.30.
1 British Library HMNTS 12626.cc.2.
2 British Library HMNTS 12625.dd.1.
3 British Library HMNTS 10369.bbb.15.
4 British Library HMNTS 9007.d.28.

Cuando nos fijamos en las primeras cinco entradas con la cabeza () método , podemos ver que un puñado de columnas proporcionan información complementaria que pueda ser útil a la biblioteca, pero no es muy descriptivo de los propios libros: Declaración de edición, Autor corporativo, Colaboradores corporativos, ex propietario, grabador, tipo de emisión y Shelfmarks.

Podemos caer estas columnas de la siguiente manera:

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

>>> df.drop(to_drop, inplace=True, axis=1)

Por encima, se definió una lista que contiene los nombres de todas las columnas que desea desconectar. A continuación, se llama a la función de caída () en nuestro objeto, que pasa en el parámetro in-situ como True y el parámetro de eje como 1. Esto le dice pandas que queremos que los cambios se realizan directamente en nuestro objetivo y que debe buscar los valores que se cayó en las columnas del objeto.

Cuando inspeccionamos la trama de datos de nuevo, vamos a ver que las columnas no deseados se han eliminado:

>>> df.head()
Identifier Place of Publication Date of Publication \
0 206 London 1879 [1878]
1 216 London; Virtue & Yorston 1868
2 218 London 1869
3 472 London 1851
4 480 London 1857

Publisher Title \
0 S. Tinsley & Co. Walter Forbes. [A novel.] By A. A
1 Virtue & Co. All for Greed. [A novel. The dedication signed...
2 Bradbury, Evans & Co. Love the Avenger. By the author of “All for Gr...
3 James Darling Welsh Sketches, chiefly ecclesiastical, to the...
4 Wertheim & Macintosh [The World in which I live, and my place in it...

Author Flickr URL
0 A. A. http://www.flickr.com/photos/britishlibrarya...
1 A., A. A. http://www.flickr.com/photos/britishlibrarya...
2 A., A. A. http://www.flickr.com/photos/britishlibrarya...
3 A., E. S. http://www.flickr.com/photos/britishlibrarya...
4 A., E. S. http://www.flickr.com/photos/britishlibrarya...

Alternativamente, también podría eliminar las columnas pasándolas a las columnas de parámetros directamente en lugar de por separado especificando las etiquetas que ser eliminado y donde el eje pandas debe buscar las etiquetas:

>>> df.drop(columns=to_drop, inplace=True)

Esta sintaxis es más intuitivo y fácil de leer. Lo que estamos tratando de hacer aquí es directamente evidente.

Si usted sabe de antemano qué columnas desea conservar, otra opción es pasar a la usecols argumento de pd.read_csv.

Cambio del Índice de un

Un Índice de pandas trama de datos

amplía la funcionalidad de los arreglos NumPy para permitir más versátil rebanar y etiquetado. En muchos casos, es útil usar un campo que identifica de forma única valioso de los datos como su índice.

Por ejemplo, en el conjunto de datos utilizado en la sección anterior, se puede esperar que cuando un búsquedas bibliotecario para un disco, se puede introducir el identificador único (valores en la columna de identificador) para un libro:

>>> df['Identifier'].is_unique
True

Vamos a sustituir el índice existente con esta columna usando set_index:

>>> df = df.set_index('Identifier')
>>> df.head()
Place of Publication Date of Publication \
206 London 1879 [1878]
216 London; Virtue & Yorston 1868
218 London 1869
472 London 1851
480 London 1857

Publisher \
206 S. Tinsley & Co.
216 Virtue & Co.
218 Bradbury, Evans & Co.
472 James Darling
480 Wertheim & Macintosh

Title Author \
206 Walter Forbes. [A novel.] By A. A A. A.
216 All for Greed. [A novel. The dedication signed... A., A. A.
218 Love the Avenger. By the author of “All for Gr... A., A. A.
472 Welsh Sketches, chiefly ecclesiastical, to the... A., E. S.
480 [The World in which I live, and my place in it... A., E. S.

Flickr URL
206 http://www.flickr.com/photos/britishlibrarya...
216 http://www.flickr.com/photos/britishlibrarya...
218 http://www.flickr.com/photos/britishlibrarya...
472 http://www.flickr.com/photos/britishlibrarya...
480 http://www.flickr.com/photos/britishlibrarya...

Detalle técnico : a diferencia de las claves principales en SQL, un Índice de pandas no hace ninguna garantía de ser único, aunque muchos de indexación y las operaciones que se fusionan se dará cuenta de un aumento de velocidad en tiempo de ejecución si se trata de .

podemos acceder a cada registro de una manera directa con loc []. Aunque loc [] no puede tener todo lo que intuitiva de un nombre, que nos permite hacer basado en etiquetas de indexación , que es el etiquetado de una fila o registro sin tener en cuenta su posición:

>>> df.loc[206]
Place of Publication London
Date of Publication 1879 [1878]
Publisher S. Tinsley & Co.
Title Walter Forbes. [A novel.] By A. A
Author A. A.
Flickr URL http://www.flickr.com/photos/britishlibrarya...
Name: 206, dtype: object

En otras palabras, 206 es la primera etiqueta del índice. Para acceder a él por la posición , podríamos utilizar df.iloc [0], lo que hace la posición basados ​​en la indexación.

Detalle técnico : .loc [] es técnicamente una instancia de clase y tiene una sintaxis especial que no se ajuste exactamente a la mayoría de los métodos de instancia llano-vainilla Python.

Anteriormente, nuestro índice era un RangeIndex: números enteros a partir de 0, análoga a la de Python incorporada en el rango. Con la aprobación de un nombre de columna a set_index, hemos cambiado el índice para los valores de identificador.

Usted puede haber notado que hemos reasignado a la variable del objeto devuelto por el método con gl = df.set_index (…). Esto se debe a que, por defecto, el método devuelve una copia modificada de nuestro objeto y no hace los cambios directamente en el objeto. Podemos evitar esto estableciendo el parámetro in-situ:

df.set_index('Identifier', inplace=True)

ordenar campos en los datos

Hasta ahora, hemos eliminado las columnas innecesarias y cambió el índice de nuestra trama de datos a algo más sensata. En esta sección, vamos a limpiar columnas específicas y conseguir que un formato uniforme para obtener una mejor comprensión del conjunto de datos y hacer cumplir la consistencia. En particular, vamos a estar limpiando Fecha de Publicación y lugar de publicación.

Tras una inspección, todos los tipos de datos son actualmente el dtype objeto, que es más o menos análoga a STR en Python nativo.

Se encapsula cualquier campo que no se puede encajar perfectamente como datos numéricos o categóricos. Esto tiene sentido ya que estamos trabajando con datos que es inicialmente un manojo de cuerdas desordenado:

>>> df.get_dtype_counts()
object 6

Un campo en el que tiene sentido para hacer cumplir un valor numérico es la fecha de publicación de modo que podamos hacer cálculos en el camino:

>>> 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

Un libro en particular sólo puede tener una fecha de publicación. Por lo tanto, tenemos que hacer lo siguiente:

  • Retire las fechas adicionales entre corchetes, si existe: 1879 [1878]
  • fecha Convert rangos a su “fecha de inicio”, si existe: 1860-1863; 1839, 38-54
  • Eliminar completamente las fechas no estamos seguros acerca y reemplazarlos con NaN de NumPy: [? 1897] Convierte
  • la cadena nan al valor NaN de NumPy

sintetizar estos patrones, en realidad podemos aprovechar una sola expresión regular para extraer el año de publicación:

regex = r'^(\d{4})'

la expresión regular anteriormente pretende encontrar cuatro dígitos en el principio de una cadena, lo que es suficiente para nuestro caso. Lo anterior es una cadena de texto en (lo que significa que una barra invertida ya no es un carácter de escape), que es la práctica estándar con expresiones regulares.

El \ d representa cualquier dígito, y {4} se repite esta regla cuatro veces. El carácter ^ coincide con el principio de una cadena, y los paréntesis denotan un grupo de captura, que las señales a las pandas que quieren extraer esa parte de la expresión regular. (Queremos ^ para evitar los casos en que [aperturas de la cadena.) Véase la

Vamos a repasar lo que sucede cuando nos encontramos esta expresión regular a través de nuestra base de datos:

>>> 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

No está familiarizado con expresiones regulares? Puede inspeccionar la expresión anterior en regex101.com y leer más en el pitón expresiones regulares COMO.

Técnicamente, esta columna tiene todavía dtype objeto, sino que se puede conseguir fácilmente su versión numérica con pd.to_numeric: resultados

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

esto en aproximadamente uno de cada diez valores faltando, que es un pequeño precio a pagar por ser capaz ahora hacer cálculos sobre los valores válidos restantes:

>>> df['Date of Publication'].isnull().sum() / len(df)
0.11717147339205986

Gran! ¡Eso está hecho!

Combinación de métodos str con NumPy a columnas limpias

anteriormente, usted puede haber notado el uso de df [ ‘Fecha de publicación. Str. Este atributo es una forma de operaciones de cadenas acceso rápido en pandas que las operaciones en gran mímicas en las cadenas nativas de Python o expresiones regulares compiladas, como .split (), .replace (), y .capitalize ().

para limpiar el lugar del campo de publicación, podemos combinar métodos pandas str con la función de np.where NumPy, que es básicamente una forma vectorizada de SI de Excel () macro. Tiene la siguiente sintaxis:

>>> np.where(condition, then, else)

Aquí, la condición es o bien una matriz-como objeto o una máscara booleana. a continuación, es el valor que se utilizará si la condición se evalúa como verdadera, y otra cosa es el valor a ser utilizado de otra manera.

Esencialmente, .donde () toma cada elemento en el objeto utilizado para la condición, comprueba si que evalúa particulares de elementos a cierto en el contexto de la condición, y devuelve un ndarray contiene entonces o bien, dependiendo de la que se aplica.

Se puede anidar en un compuesto si-entonces declaración, lo que nos permite calcular los valores en base a múltiples condiciones:

>>> np.where(condition1, x1,
np.where(condition2, x2,
np.where(condition3, x3, ...)))

vamos a hacer uso de estas dos funciones a limpio lugar de publicación ya que esta columna tiene objetos de cadena. Estos son los contenidos de la columna:

>>> 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

vemos que para algunas filas, el lugar de publicación está rodeado de otra información innecesaria. Si tuviéramos que mirar más valores, veríamos que este es el caso sólo para algunas filas que tienen su lugar de publicación como ‘Londres’ o ‘Oxford’. La toma del

Let un vistazo a dos entradas específicas:

>>> df.loc[4157862]
Place of Publication Newcastle-upon-Tyne
Date of Publication 1867
Publisher T. Fordyce
Title Local Records; or, Historical Register of rema...
Author T. Fordyce
Flickr URL http://www.flickr.com/photos/britishlibrarya...
Name: 4157862, dtype: object

>>> df.loc[4159587]
Place of Publication Newcastle upon Tyne
Date of Publication 1834
Publisher Mackenzie & Dent
Title An historical, topographical and descriptive v...
Author E. (Eneas) Mackenzie
Flickr URL http://www.flickr.com/photos/britishlibrarya...
Name: 4159587, dtype: object

Estos dos libros fueron publicados en el mismo lugar, pero uno tiene guiones en el nombre del lugar, mientras que el otro no.

Para limpiar esta columna en un barrido, podemos utilizar str.contains () para obtener una máscara booleana.

Limpiamos la columna de la siguiente manera:

>>> 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

>>> oxford = pub.str.contains('Oxford')

Las combinamos con np.where:

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

>>> df['Place of Publication'].head()
Identifier
206 London
216 London
218 London
472 London
480 London
Name: Place of Publication, dtype: object

Aquí, la función se llama np.where en una estructura anidada, con la condición de ser una serie de booleanos obtenidos con str.contains ( ). El método contains () funciona de manera similar a la incorporada en el de palabra clave utilizada para encontrar la ocurrencia de una entidad en un iterable (o subcadena en una cadena).

La sustitución a utilizar es una cadena que representa nuestro lugar deseado de la publicación. También reemplazamos guiones con un espacio con str.replace () y volver a asignar a la columna en nuestra trama de datos.

Aunque hay más datos sucios en este conjunto de datos, vamos a discutir sólo estas dos columnas por ahora. de

Let echar un vistazo a las primeras cinco entradas, que se parecen más nítidas mucho que cuando empezamos a cabo:

>>> df.head()
Place of Publication Date of Publication Publisher \
206 London 1879 S. Tinsley & Co.
216 London 1868 Virtue & Co.
218 London 1869 Bradbury, Evans & Co.
472 London 1851 James Darling
480 London 1857 Wertheim & Macintosh

Title Author \
206 Walter Forbes. [A novel.] By A. A AA
216 All for Greed. [A novel. The dedication signed... A. A A.
218 Love the Avenger. By the author of “All for Gr... A. A A.
472 Welsh Sketches, chiefly ecclesiastical, to the... E. S A.
480 [The World in which I live, and my place in it... E. S A.

Flickr URL
206 http://www.flickr.com/photos/britishlibrarya...
216 http://www.flickr.com/photos/britishlibrarya...
218 http://www.flickr.com/photos/britishlibrarya...
472 http://www.flickr.com/photos/britishlibrarya...
480 http://www.flickr.com/photos/britishlibrarya...

Nota : En este punto, lugar de edición sería un candidato bueno para la conversión a una categóricas de tipo D, ya que podemos codificar el bastante pequeño conjunto único de ciudades con números enteros. ( El uso de la memoria de un categórico es proporcional al número de categorías más la longitud de los datos; un dtype objeto es una constante multiplicada por la longitud de los datos .)

de limpieza en el conjunto de datos Uso de la función applymap

En ciertas situaciones, verá que la “suciedad” no se localiza a una columna, pero está más extendido.

hay algunos casos en los que sería útil aplicar una función personalizada a cada celda o elemento de una trama de datos. Método pandas .applymap () es similar a la función de mapa incorporado () y simplemente aplica una función a todos los elementos de una trama de datos. La mirada de

Veamos un ejemplo. Vamos a crear una trama de datos fuera de la “university_towns.txt” file:

$ head Datasets/univerisity_towns.txt
Alabama[edit]
Auburn (Auburn University)[1]
Florence (University of North Alabama)
Jacksonville (Jacksonville State University)[2]
Livingston (University of West Alabama)[2]
Montevallo (University of Montevallo)[2]
Troy (Troy University)[2]
Tuscaloosa (University of Alabama, Stillman College, Shelton State)[3][4]
Tuskegee (Tuskegee University)[5]
Alaska[edit]

Vemos que tenemos los nombres de estado periódicas seguido por las ciudades universitarias en ese estado: stateâ TownA1 TownA2 StateB TownB1 TownB2 …. Si nos fijamos en el nombres de estado forma en que se escriben en el archivo, vamos a ver que todos ellos tienen la “[editar]” subcadena en ellos.

Nos puede tomar ventaja de este patrón mediante la creación de una lista de (estado, ciudad) tuplas y envolver esa lista en una trama de datos:

>>> university_towns = []
>>> with open('Datasets/university_towns.txt') as file:
... for line in file:
... if '[edit]' in line:
... # Remember this `state` until the next is found
... state = line
... else:
... # Otherwise, we have a city; keep `state` as last-seen
... university_towns.append((state, line))

>>> university_towns[:5]
[('Alabama[edit]\n', 'Auburn (Auburn University)[1]\n'),
('Alabama[edit]\n', 'Florence (University of North Alabama)\n'),
('Alabama[edit]\n', 'Jacksonville (Jacksonville State University)[2]\n'),
('Alabama[edit]\n', 'Livingston (University of West Alabama)[2]\n'),
('Alabama[edit]\n', 'Montevallo (University of Montevallo)[2]\n')]

Podemos concluir esta lista en una trama de datos y establecer las columnas como “Estado” y “regionName”. Pandas se llevará a cada elemento de la lista y Estado establece en el valor izquierda y regionName al valor correcto.

Las miradas trama de datos resultante de este tipo:

>>> towns_df = pd.DataFrame(university_towns,
... columns=['State', 'RegionName'])

>>> towns_df.head()
State RegionName
0 Alabama[edit]\n Auburn (Auburn University)[1]\n
1 Alabama[edit]\n Florence (University of North Alabama)\n
2 Alabama[edit]\n Jacksonville (Jacksonville State University)[2]\n
3 Alabama[edit]\n Livingston (University of West Alabama)[2]\n
4 Alabama[edit]\n Montevallo (University of Montevallo)[2]\n

A pesar de que podrían haber limpiado estas cadenas en el bucle anterior, pandas hace que sea fácil. Sólo necesitamos el nombre del estado y el nombre de la ciudad y podemos quitar todo lo demás. Aunque podríamos utilizar .str pandas’ () métodos de nuevo aquí, también podríamos utilizar applymap () para asignar un pitón exigible a cada elemento de la trama de datos.

Hemos estado utilizando el término elemento , pero ¿qué es exactamente lo que quiere decir con eso? Consideremos el siguiente “juguete” trama de datos:

0 1
0 Mock Dataset
1 Python Pandas
2 Real Python
3 NumPy Clean

En este ejemplo, cada celda ( ‘Mock’, ‘conjunto de datos’, ‘Python’, ‘pandas’, etc.) es un elemento. Por lo tanto, applymap () se aplicará una función a cada uno de éstos de forma independiente. Vamos a definir esa función: .applymap

>>> def get_citystate(item):
... if ' (' in item:
... return item[:item.find(' (')]
... elif '[' in item:
... return item[:item.find('[')]
... else:
... return item

pandas’ () sólo toma un parámetro, que es la función (exigible) que se debe aplicar a cada elemento:

>>> towns_df = towns_df.applymap(get_citystate)

En primer lugar, definimos una función de Python que toma un elemento de la trama de datos como su parámetro. Dentro de la función, se realizan comprobaciones para determinar si hay una (o [en el elemento o no.

Dependiendo de la verificación, los valores se devuelven en consecuencia por la función. Por último, la función applymap () se llama en nuestro objeto. Ahora la trama de datos es mucho más limpio:.!

>>> towns_df.head()
State RegionName
0 Alabama Auburn
1 Alabama Florence
2 Alabama Jacksonville
3 Alabama Livingston
4 Alabama Montevallo

el método applymap () tomó cada elemento de la trama de datos, se lo pasó a la función, y el valor original fue reemplazado por el valor devuelto es así de simple

Detalle técnico : Mientras es un tiempo de ejecución significativa conveniente y versátil método, .applymap puede tener para grandes conjuntos de datos, ya que los mapas de un pitón exigible a cada elemento individual. En algunos casos, puede ser más eficiente que hacer vectorizado operaciones que utilizan Cython o numpy ( el cual, a su vez, hace llamadas en C) bajo el capó. Columnas

cambio de nombre y filas que saltan

a menudo, los conjuntos de datos deberá trabajar tendrán nombres de columna que no son de correo asy de entender, o información poco importante en las primeras y / o las últimas filas, como las definiciones de los términos en el conjunto de datos, o notas al pie.

En ese caso, nos gustaría cambiar el nombre de columnas y filas saltar ciertas para que podamos profundizar en la información necesaria con las etiquetas correctas y sensatas.

Para demostrar cómo podemos ir haciendo esto, primero vamos a echar un vistazo a las cinco filas iniciales de la “olympics.csv” conjunto de datos:

$ head -n 5 Datasets/olympics.csv
0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15
,? Summer,01 !,02 !,03 !,Total,? Winter,01 !,02 !,03 !,Total,? Games,01 !,02 !,03 !,Combined total
Afghanistan (AFG),13,0,0,2,2,0,0,0,0,0,13,0,0,2,2
Algeria (ALG),12,5,2,8,15,3,0,0,0,0,15,5,2,8,15
Argentina (ARG),23,18,24,28,70,18,0,0,0,0,41,18,24,28,70

Ahora, vamos a leer en una trama de datos pandas:

>>> olympics_df = pd.read_csv('Datasets/olympics.csv')
>>> olympics_df.head()
0 1 2 3 4 5 6 7 8 \
0 NaN ? Summer 01 ! 02 ! 03 ! Total ? Winter 01 ! 02 !
1 Afghanistan (AFG) 13 0 0 2 2 0 0 0
2 Algeria (ALG) 12 5 2 8 15 3 0 0
3 Argentina (ARG) 23 18 24 28 70 18 0 0
4 Armenia (ARM) 5 1 2 9 12 6 0 0

9 10 11 12 13 14 15
0 03 ! Total ? Games 01 ! 02 ! 03 ! Combined total
1 0 0 13 0 0 2 2
2 0 0 15 5 2 8 15
3 0 0 41 18 24 28 70
4 0 0 11 1 2 9 12

Este es complicado de verdad! Las columnas son la forma de cadena de números enteros indexadas en 0. La fila que debería haber sido nuestra cabecera (es decir, el uno para ser utilizado para establecer los nombres de columna) es al olympics_df.iloc [0]. Esto sucedió porque nuestros archivos CSV comienza con 0, 1, 2, …, 15.

Además, si tuviéramos que ir a la fuente de este conjunto de datos, nos gustaría ver que por encima de NaN realidad debería ser algo así como “País” ? El verano se supone que representa “Juegos de Verano”, 01! debe ser “oro”, y así sucesivamente.

Por lo tanto, tenemos que hacer dos cosas:

  • Omitir una fila y establecer la cabecera como la primera fila (indexada 0)
  • Renombrar las columnas

Podemos saltar filas y establecer la cabecera, mientras que la lectura de la CSV presentar al pasar algunos parámetros para la función read_csv ().

Esta función toma mucho de parámetros opcionales, pero en este caso sólo necesita uno (cabecera) para eliminar la fila 0:

>>> olympics_df = pd.read_csv('Datasets/olympics.csv', header=1)
>>> olympics_df.head()
Unnamed: 0 ? Summer 01 ! 02 ! 03 ! Total ? Winter \
0 Afghanistan (AFG) 13 0 0 2 2 0
1 Algeria (ALG) 12 5 2 8 15 3
2 Argentina (ARG) 23 18 24 28 70 18
3 Armenia (ARM) 5 1 2 9 12 6
4 Australasia (ANZ) [ANZ] 2 3 4 5 12 0

01 !.1 02 !.1 03 !.1 Total.1 ? Games 01 !.2 02 !.2 03 !.2 \
0 0 0 0 0 13 0 0 2
1 0 0 0 0 15 5 2 8
2 0 0 0 0 41 18 24 28
3 0 0 0 0 11 1 2 9
4 0 0 0 0 2 3 4 5

Combined total
0 2
1 15
2 70
3 12
4 12

Ahora tenemos la correcta conjunto fila como la cabecera y todas las filas innecesarias eliminadas. Toma nota de cómo pandas ha cambiado el nombre de la columna que contiene el nombre de los países desde NAN a Sin nombre: 0.

Para cambiar el nombre de las columnas, haremos uso del método () de cambio de nombre de una trama de datos, que le permite volver a etiquetar una eje basándose en una correlación (en este caso, un dict). inicio de

Let mediante la definición de un diccionario que mapea nombres de las columnas actuales (como claves) a los más utilizables (valores del diccionario):

>>> 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'}

llamamos a la función de cambio de nombre () en nuestro objeto:

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

Configuración inplace a True Especifica que los cambios pueden hacer directamente al objeto. Vamos a ver si este da de baja:

>>> olympics_df.head()
Country Summer Olympics Gold Silver Bronze Total \
0 Afghanistan (AFG) 13 0 0 2 2
1 Algeria (ALG) 12 5 2 8 15
2 Argentina (ARG) 23 18 24 28 70
3 Armenia (ARM) 5 1 2 9 12
4 Australasia (ANZ) [ANZ] 2 3 4 5 12

Winter Olympics Gold.1 Silver.1 Bronze.1 Total.1 # Games Gold.2 \
0 0 0 0 0 0 13 0
1 3 0 0 0 0 15 5
2 18 0 0 0 0 41 18
3 6 0 0 0 0 11 1
4 0 0 0 0 0 2 3

Silver.2 Bronze.2 Combined total
0 0 2 2
1 2 8 15
2 24 28 70
3 2 9 12
4 4 5 12

Python de datos limpieza: Recapitulación y Recursos

En este tutorial, aprendieron cómo se puede soltar información innecesaria de un conjunto de datos utilizando la función de descenso (), así como la forma de establecer un índice de el conjunto de datos de manera que los elementos de que se puede hacer referencia fácilmente.

Por otra parte, ha aprendido a campos de objetos limpios con el descriptor de acceso .str () y cómo limpiar todo el conjunto de datos utilizando el método applymap (). Por último, exploramos cómo omitir filas en un archivo CSV y cambiar el nombre de las columnas utilizando el método de cambio de nombre ().

Conocer la existencia de depuración de los datos es muy importante, ya que es una gran parte de la ciencia de datos. Ahora tiene una comprensión básica de cómo pandas y NumPy se pueden aprovechar para conjuntos de datos limpios!

Mira la siguientes vínculos para obtener recursos adicionales que le ayudarán en su viaje de la ciencia de datos de Python: documentación

  • las pandas documentación
  • El NumPy
  • pitón de Análisis de Datos por Wes McKinney, el creador de pandas
  • pandas libro de cocina por Ted Petrou, un entrenador de la ciencia de datos y consultor de experiencia

gratuito: Haga clic aquí para obtener acceso a una Guía de Recursos libre NumPy que señala al los mejores tutoriales, videos y libros para mejorar sus habilidades NumPy.

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *