Pandas La navaja suiza para tus datos, Parte 1

Pandas es un increíble conjunto de herramientas de análisis de datos para Python. Está diseñado para funcionar con datos relacionales o etiquetados y le brinda herramientas para cortar y cortar a su gusto.. 

En este tutorial de dos partes, aprenderá acerca de las estructuras de datos fundamentales de Pandas: la serie y el marco de datos. También aprenderá cómo seleccionar datos, lidiar con valores faltantes, manipular sus datos, combinar sus datos, agrupar sus datos, trabajar con series de tiempo e incluso trazar datos.

Instalación

Para instalar, solo pip instalar pandas. También se encargará de instalar numpy si no lo tiene instalado..

Serie

Las series de pandas están escritas y etiquetadas como arreglos 1-D. Esto significa que se puede acceder a cada elemento por su etiqueta además de su índice.

Aquí hay una serie de enteros donde las etiquetas son números romanos. Puede indexar y segmentar utilizando las etiquetas o los índices enteros. A diferencia de la división de la lista de Python, cuando se usan etiquetas, se incluye el último elemento!

>>> s = pd.Series (np.arange (1,5), ['I', 'II', 'III', 'IV', 'V']) >>> s ['III'] 3 >>> s [0] 1 >>> s ['II': 'V'] II 2 III 3 IV 4 V 5 >>> s [1: 5] II 2 III 3 IV 4 V 5 

Si no proporciona un índice, se crea automáticamente un índice entero basado en 0:

>>> s = pd.Serie ((50, 7, 88, 9)) >>> s 0 50 1 7 2 88 3 9

Ahora, aquí hay un pequeño secreto para ti. Las series de pandas envuelven las matrices de Numpy..

>>> s.values ​​array ([50, 7, 88, 9]) >>> tipo (s.values)  

A diferencia de las listas de Python o las matrices numpy, las operaciones en serie se alinean en el índice. Si los índices no coinciden, la unión de índices se utilizará con los valores faltantes, según corresponda. Aquí hay algunos ejemplos que utilizan los dictados como datos para que las claves se conviertan en el índice de la serie:

>>> s1 = pd.Series (dict (a = 1, b = 2, c = 3)) >>> s2 = pd.Series (dict (a = 4, b = 5, c = 6, d = 7 )) >>> s1 + s2 a 5.0 b 7.0 c 9.0 d NaN >>> s1 [1:] * s2 [: - 1] a NaN b 10.0 c 18.0

Marcos de datos

Los marcos de datos son la estructura de datos primaria de los pandas. Representan tablas de datos donde cada columna es una serie. Los marcos de datos también tienen un índice, que sirve como una etiqueta de fila. Un marco de datos también tiene etiquetas de columna. Aquí es cómo declarar un marco de datos utilizando un dict. 

>>> df = pd.DataFrame (dict (a = [1, 2, 3], b = [4,5,6], c = pd.Timestamp ('20170902'), d = pd.Categorical ([' rojo ',' verde ',' azul ']))) >>> df abcd 0 1 4 2017-09-02 rojo 1 2 5 2017-09-02 verde 2 3 6 2017-09-02 azul

Tenga en cuenta que un índice entero (etiqueta de fila) se creó automáticamente. Por supuesto, puede proporcionar su propio índice:

>>> df.index = ('I II III'.split ()) >>> df a b c d I 1 4 2017-09-02 rojo II 2 5 2017-09-02 verde III 3 6 2017-09-02 azul

Importando y exportando datos

Los marcos de datos se pueden construir a partir de una gran variedad de fuentes:

  • dict de ndarrays 1-D, listas, dictados o series
  • 2-D numpy.ndarray
  • ndarray estructurado o registro
  • otro DataFrame

También puede importar o cargar datos de muchos formatos de archivos y bases de datos, como:

  • CSV
  • Sobresalir
  • HTML
  • HDFStore 
  • SQL

Aquí es cómo leer un archivo CSV:

data.csv -------- I, 1,4,2017-09-02, rojo II, 2,5,2017-09-02, verde III, 3,6,2017-09-02, azul >>> pd.read_csv ('data.csv') I 1 4 2017-09-02 rojo 0 II 2 5 2017-09-02 verde 1 III 3 6 2017-09-02 azul 

Aquí está la lista completa de read_functions ():

>>> read_functions = [a for a in dir (pd) si a.startswith ('read_')] >>> print ('\ n'.join (read_functions)) read_clipboard read_csv read_json read_gcel read_gcel read_sas read_sql read_sql_query read_sql_table read_stata read_table 

Existen métodos correspondientes en el propio objeto de marco de datos para exportar los datos a muchos formatos y bases de datos. Aquí es cómo exportar a json y msgpack:

>>> df.to_json () '"a": "I": 1, "II": 2, "III": 3, "b": "I": 4, "II": 5 , "III": 6, "c": "I": 1504310400000, "II": 1504310400000, "III": 1504310400000, "d": "I": "rojo", "II": " verde "," III ":" azul " '>>> df.to_msgpack () b' \ x84 \ xa3typ \ xadblock_manager \ xa5klass \ xa9DataFrame \ xa4axlass \ xa5 xc0 \ xa5dtype \ xa6object \ xa4data \ x94 \ xa1a \ xa1b \ xa1d \ xa1 x \ '\' \ '\' \ '\' \ '\' \ '\' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' ' xa8compress \ xc0 \ xa6blocks \ x93 \ x86 \ xa4locs \ x86 \ xa3typ \ xa7ndarray \ xa5shape \ x91 \ x02 \ xa4ndim x x / lo que es un archivo de correo electrónico / xa5int / \ xa4n64 / xa4nata \ xa4nata \ xa4xata \ xa4nata \ xa4nata \ xa4nata \ xa4nata \ xa4nata \ xa4nata \ xa4xata \ xa4xata \ xa4xata \ xa4xta \ x x00 \ x00 \ x01 \ x00 \ x00 \ x00 \ x00 \ x00 \ x00 \ x00 \ xa8compress \ xc0 \ xa6values ​​\ xc70 \ x00 \ x01 \ x00 \ x00 \ x00 \ x00 \ x00 \ x00 \ x00 \ x00 \ x0 \ x00 \ x00 \ x00 \ x00 \ x00 \ x00 \ x00 \ x03 \ x00 \ x00 \ x00 \ x00 \ x00 \ x00 \ x00 \ x04 \ x00 \ x00 \ x00 \ x00 \ x00 \ x00 \ x00 \ x00 \ x05 \ x00 \ x00 \ x00 \ x00 \ x00 \ x00 \ x00 \ x00 \ x00 \ x00 \ x00 \ x00 \ x00 \ x00 \ x00 \ xa5shape \ x92 \ x03 \ xa5dtype \ xa5int64 \ xa5klass xa8IntBlock \ xa8sttype \ xc x x s \ x86 \ xa3typ \ xa7ndarray \ xa5shape \ x91 \ x01 \ xa4ndim \ x01 \ xa5dtype \ xa5int64 \ xa4data \ xd7 \ x \ v \ n \ v \ n \ p \ n \ n \ n \ s \ _ \ _ \ _ \ _ \ \ \ \ \ \ \ \ \ _ \ _ \ _ \ _ \ _ \ _ \ _ \ n \ _ \ _ \ _ \ _ \ _ \ _ \ _ \ n \ _ \ _ \ _ \ _ \ _ \ _ \ \ \ \ \ \ S \ _ \ " xc7 \ x18 \ x00 \ x00 \ x00 \ xed \ xafVb \ xe0 \ x14 \ x00 \ x00 \ x00 \ xed \ xafVb \ xe0 \ x14 \ x00 \ x00 \ xed \ x03 \ x00 \ x14 xa5dtype \ xaedatetime64 [ns] \ xa5klass \ xadDatetimeBlock \ \ xa8compress \ xc0 \ x86 \ xa4locs \ x86 \ xa3ty \ "\" \ "\" \ "\" \ "\" \ "\" \ "\" \ x00 \ x00 \ x00 \ x00 \ x00 \ xa8compress \ xc0 \ xa6values ​​\ x87 \ xa3typ \ xa8category \ xa5klass \ xabCategorical lo que es de las partes de la naturaleza de la naturaleza de los animales en el lugar de juego. \ xa4int8 \ xa4data \ xc7 \ x03 \ x00 \ x02 \ x01 \ x00 \ xa8compress \ xc0 \ xaacategories \ x86 \ xa3ty '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' ' \ xa8compress \ xc0 \ xa7ordered \ xc2 \ xa8compress \ xc0 \ xa5shape \ x91 \ x03 \ xa5dtype \ xa8category \ xa5klass \ xb0CategoricalBlock \ xa8compress \ xc0 '

Metadatos y estadísticas

Pandas da mucha información sobre los marcos de datos. Echa un vistazo a estos métodos:

>>> Índice df.index (['I', 'II', 'III'], dtype = "objeto") >>> Índice df.columns (['a', 'b', 'c', ' d '], dtype = "objeto") >>> df.describe () ab cuenta 3.0 3.0 significa 2.0 5.0 estándar 1.0 1.0 min 1.0 4.0 25% 1.5 4.5 50% 2.0 5.0 75% 2.5 5.5 max 3.0 6.

Seleccionando datos

Los marcos de datos le permiten seleccionar datos. Si desea seleccionar una fila por índice, necesita usar la loc atributo. Para seleccionar columnas, simplemente use el nombre de la columna. Aquí se explica cómo seleccionar filas individuales, columnas individuales, un segmento de filas, un segmento de columnas y, por último, una sección rectangular (subconjunto de filas y subconjunto de columnas de estas filas):

Fila única ---------- >>> df.loc ['II'] a 2 b 5 c 2017-09-02 00:00:00 d verde Múltiples filas usando un índice entero (no 'loc' ) -------------------------------------------- >>> df [ : 2] abcd I 1 4 2017-09-02 rojo II 2 5 2017-09-02 verde Columna única ------------- >>> df ['b'] I 4 II 5 III 6 Columnas múltiples ---------------- >>> df.loc [:, 'b': 'c'] bc I 4 2017-09-02 II 5 2017-09 -02 III 6 2017-09-02 Sección rectangular ------------------- >>> df.loc [: 'II', 'b': 'c'] bc I 4 2017-09-02 II 5 2017-09-02 Usando índice entero (cuando el índice real no es entero) ------------------------ ------------------------------ >>> df.iloc [: 2, 1: 3] bc I 4 2017-09 -02 II 5 2017-09-02 

Además de esas selecciones de datos de direccionamiento directo, también puede seleccionar en función de los valores. Por ejemplo, puede seleccionar solo filas con valores pares en la columna b: 

>>> df [df.b% 2 == 0] a b c d I 1 4 2017-09-02 rojo III 3 6 2017-09-02 azul

Ordenar datos

Pandas te da la clasificación también. Ordenemos el siguiente cuadro de datos por índice (filas) y por columna. La indexación de niveles múltiples también es compatible:

índice = ['uno', 'dos', 'tres', 'cuatro', 'cinco'] df = pd.DataFrame (np.random.randn (5,2), índice = índice, columnas = ['a' , 'b']) Ordenar por índice (alfabéticamente y descendente) ------------------------------------ --------- >>> df.sort_index (ascendente = Falso) ab dos -0.689523 1.411403 tres 0.332707 0.307561 uno -0.042172 0.374922 cuatro 0.426519 -0.425181 cinco -0.161095 -0.849932 Ordenar por columna ------ -------- >>> df.sort_values ​​(by = 'a') ab dos -0.689523 1.411403 cinco -0.161095 -0.849932 uno -0.042172 0.374922 tres 0.332707 0.307561 cuatro 0.426519 -0.425181

Conclusión

En esta parte del tutorial, cubrimos los tipos de datos básicos de Pandas: la serie y el marco de datos. Importamos y exportamos datos, seleccionamos subconjuntos de datos, trabajamos con metadatos y ordenamos los datos. En la segunda parte, continuaremos nuestro viaje y trataremos los datos faltantes, la manipulación de datos, la fusión de datos, la agrupación de datos, las series de tiempo y el trazado. Manténganse al tanto.

Mientras tanto, no dude en ver lo que tenemos disponible para la venta y para estudiar en el mercado, y no dude en hacer cualquier pregunta y proporcionar sus valiosos comentarios utilizando la siguiente información..