Pandas es un paquete Python de c贸digo abierto que proporciona numerosas herramientas para el an谩lisis de datos. El paquete viene con varias estructuras de datos que se pueden usar para muchas tareas diferentes de manipulaci贸n de datos. Tambi茅n tiene una variedad de m茅todos que se pueden invocar para el an谩lisis de datos, lo que resulta 煤til cuando se trabaja en ciencia de datos y problemas de Machine Learning en Python.
Ventajas de usar panda
Contenido
Las siguientes son algunas de las ventajas de la biblioteca Pandas :
- Se puede presentar datos de una manera que es adecuado para el an谩lisis de datos a trav茅s de sus
Series
yDataFrame
estructuras de datos. - El paquete contiene varios m茅todos para un filtrado de datos conveniente.
- Pandas tiene una variedad de utilidades para realizar operaciones de entrada / salida de manera transparente. Puede leer datos de una variedad de formatos como CSV, TSV, MS Excel, etc.
Instalaci贸n de Panda
La distribuci贸n est谩ndar de Python no viene con el m贸dulo Pandas. Para utilizar este m贸dulo de terceros, debe instalarlo.
Lo bueno de Python es que viene con una herramienta llamada pip que puede usarse para la instalaci贸n de Pandas. Para realizar la instalaci贸n, debe ejecutar el siguiente comando:
$ pip install pandas
Si ha instalado Anaconda en su sistema, simplemente ejecute el siguiente comando para instalar Pandas:
$ conda install pandas
Se recomienda encarecidamente que instale la 煤ltima versi贸n del paquete Pandas. Sin embargo, si desea instalar una versi贸n anterior, puede especificarla ejecutando el conda install
comando de la siguiente manera:
$ conda install pandas=0.23.4
Estructuras de datos de Panda
Pandas tiene dos estructuras de datos principales para el almacenamiento de datos:
- Serie
- Marco de datos
Serie
Una serie es similar a una matriz unidimensional. Puede almacenar datos de cualquier tipo. Los valores de Pandas Series
son mutables, pero el tama帽o de a Series
es inmutable y no se puede cambiar.
Al primer elemento de la serie se le asigna el 铆ndice 0
, mientras que el 煤ltimo elemento est谩 en el 铆ndice N-1
, donde N
es el n煤mero total de elementos de la serie.
Para crear un Pandas Series
, primero debemos importar el paquete Pandas a trav茅s del import
comando de Python :
import pandas as pd
Para crear Series
, invocamos el pd.Series()
m茅todo y pasamos una matriz, como se muestra a continuaci贸n:
series1 = pd.Series([1,2,3,4])
A continuaci贸n, ejecute la print
declaraci贸n para mostrar el contenido de Series
:
print(series1)
Salida:
0 1
1 2
2 3
3 4
dtype: int64
Puedes ver que tenemos dos columnas, la primera con n煤meros comenzando por el 铆ndice 0
y la segunda con los elementos que se agregaron a la serie.
La primera columna denota los 铆ndices de los elementos.
Sin embargo, es posible que obtenga un error cuando intente mostrar el Series
. La principal causa de este error es que Pandas busca la cantidad de informaci贸n para mostrar, por lo tanto, debe proporcionar la informaci贸n de salida del sistema.
Puede solucionar el error ejecutando el c贸digo de la siguiente manera:
import pandas as pd
import sys
sys.__stdout__ = sys.stdout
series1 = pd.Series([1,2,3,4])
print(series1)
A Series
tambi茅n puede ser creado a partir de un numpy matriz. Creemos una matriz numpy y luego convi茅rtala en Pandas Series
:
import pandas as pd
import numpy as np
import sys
sys.__stdout__ = sys.stdout
fruits = np.array(['apple','orange','mango','pear'])
series2 = pd.Series(fruits)
print(series2)
Salida:
0 apple
1 orange
2 mango
3 pear
dtype: object
Comenzamos importando las bibliotecas necesarias, incluido numpy
. A continuaci贸n, llamamos a la array()
funci贸n de numpy para crear una variedad de frutas. Luego usamos la Series()
funci贸n Pandas y le pasamos la matriz que queremos convertir en una serie. Finalmente, llamamos a la print()
funci贸n para mostrar el Series
.
Marco de datos
El DataFrame de Pandas se puede ver como una tabla. Organiza los datos en filas y columnas, lo que los convierte en una estructura de datos bidimensional. Potencialmente, las columnas son de un tipo diferente y el tama帽o del DataFrame es mutable y, por lo tanto, puede modificarse.
Para crear un DataFrame, puede optar por empezar desde cero o convertir otras estructuras de datos como matrices Numpy en un DataFrame. As铆 es como puede crear un DataFrame desde cero:
import pandas as pd
df = pd.DataFrame({
"Column1": [1, 4, 8, 7, 9],
"Column2": ['a', 'column', 'with', 'a', 'string'],
"Column3": [1.23, 23.5, 45.6, 32.1234, 89.453],
"Column4": [True, False, True, False, True]
})
print(df)
Salida:
Column1 Column2 Column3 Column4
0 1 a 1.2300 True
1 4 column 23.5000 False
2 8 with 45.6000 True
3 7 a 32.1234 False
4 9 string 89.4530 True
En este ejemplo, hemos creado un DataFrame llamado df
. La primera columna del DataFrame tiene valores enteros. La segunda columna tiene una cadena, la tercera columna tiene valores de punto flotante, mientras que la cuarta columna tiene valores booleanos.
La declaraci贸n print(df)
nos mostrar谩 el contenido del DataFrame a trav茅s de la consola, lo que nos permitir谩 inspeccionar y verificar su contenido.
Sin embargo, al mostrar el DataFrame, es posible que haya notado que hay una columna adicional al inicio de la tabla, con sus elementos comenzando en 0. Esta columna se crea autom谩ticamente y marca los 铆ndices de las filas.
Para crear un DataFrame, debemos invocar el pd.DataFrame()
m茅todo como se muestra en el ejemplo anterior.
Es posible para nosotros crear un DataFrame a partir de una lista o incluso un conjunto de listas. Solo tenemos que llamar al pd.DataFrame()
m茅todo y luego pasarle la variable list como 煤nico argumento.
Considere el siguiente ejemplo:
import pandas as pd
mylist = [4, 8, 12, 16, 20]
df = pd.DataFrame(mylist)
print(df)
Salida:
0
0 4
1 8
2 12
3 16
4 20
En este ejemplo creamos una lista nombrada mylist
con una secuencia de 5 enteros. Luego llamamos al DataFrame()
m茅todo y le pasamos el nombre de la lista como argumento. Aqu铆 es donde ocurri贸 la conversi贸n de la lista a un DataFrame.
Luego imprimimos el contenido del DataFrame. El DataFrame tiene una columna predeterminada que muestra 铆ndices, con el primer elemento en el 铆ndice 0 y el 煤ltimo en el 铆ndice N-1
, donde N es el n煤mero total de elementos en el DataFrame.
Aqu铆 hay otro ejemplo:
import pandas as pd
items = [['Phone', 2000], ['TV', 1500], ['Radio', 800]]
df = pd.DataFrame(items, columns=['Item', 'Price'], dtype=float)
print(df)
Salida:
Item Price
0 Phone 2000.0
1 TV 1500.0
2 Radio 800.0
Aqu铆 hemos creado una lista nombrada items
con un conjunto de 3 elementos. Para cada art铆culo, tenemos un nombre y un precio. Luego, la lista se pasa al DataFrame()
m茅todo para convertirla en un DataFrame
objeto.
En este ejemplo, tambi茅n se han especificado los nombres de las columnas para el DataFrame. Los valores num茅ricos tambi茅n se han convertido en valores de punto flotante desde que especificamos el dtype
argumento como “flotante”.
Para obtener un resumen de los datos de este elemento, podemos llamar a la describe()
funci贸n en la variable DataFrame, es decir df
:
df.describe()
Salida:
Price
count 3.000000
mean 1433.333333
std 602.771377
min 800.000000
25% 1150.000000
50% 1500.000000
75% 1750.000000
max 2000.000000
La describe()
funci贸n devuelve algunos detalles estad铆sticos comunes de los datos, incluida la media, la desviaci贸n est谩ndar, el elemento m铆nimo, el elemento m谩ximo y algunos otros detalles. Esta es una excelente manera de obtener una instant谩nea de los datos con los que est谩 trabajando si el conjunto de datos es relativamente desconocido para usted. Tambi茅n podr铆a ser una buena forma de comparar r谩pidamente dos conjuntos de datos separados de datos similares.
Importaci贸n de datos
A menudo, necesitar谩 utilizar Pandas para analizar los datos almacenados en un archivo de Excel o en un archivo CSV. Esto requiere que abra e importe los datos de dichas fuentes a Pandas.
Afortunadamente, Pandas nos proporciona numerosos m茅todos que podemos usar para cargar los datos de dichas fuentes en un Pandas DataFrame.
Importaci贸n de datos CSV
Un archivo CSV, que significa valor separado por comas, es simplemente un archivo de texto con valores separados por una coma (,). Dado que este es un est谩ndar muy conocido y de uso frecuente, podemos usar Pandas para leer archivos CSV en su totalidad o en parte.
Para este ejemplo, crearemos un archivo CSV llamado cars.csv. El archivo debe tener los siguientes datos:
Number,Type,Capacity
SSD,Premio,1800
KCN,Fielder,1500
USG,Benz,2200
TCH,BMW,2000
KBQ,Range,3500
TBD,Premio,1800
KCP,Benz,2200
USD,Fielder,1500
UGB,BMW,2000
TBG,Range,3200
Puede copiar los datos y pegarlos en un editor de texto como el Bloc de notas, y luego guardarlos con el nombre cars.csv en el mismo directorio que sus scripts de Python.
Pandas nos proporciona un m茅todo denominado read_csv
que se puede utilizar para leer valores CSV en un Pandas DataFrame. El m茅todo toma la ruta al archivo CSV como argumento.
El siguiente c贸digo es lo que usaremos para ayudarnos a leer el archivo cars.csv:
import pandas as pd
data = pd.read_csv('cars.csv')
print(data)
Salida:
Number Type Capacity
0 SSD Premio 1800
1 KCN Fielder 1500
2 USG Benz 2200
3 TCH BMW 2000
4 KBQ Range 3500
5 TBD Premio 1800
6 KCP Benz 2200
7 USD Fielder 1500
8 UGB BMW 2000
9 TBG Range 3200
En mi caso, guard茅 el archivo CSV en el mismo directorio que el script de Python, por lo que simplemente pas茅 el nombre del archivo al read_csv
m茅todo y supo verificar el directorio de trabajo actual.
Si ha guardado su archivo en una ruta diferente, aseg煤rese de pasar la ruta correcta como argumento del m茅todo. Puede ser una ruta relativa, como “../cars.csv”, o una ruta absoluta como “/Users/nicholas/data/cars.csv”.
En algunos casos, puede tener miles de filas en su conjunto de datos. En tal caso, ser铆a m谩s 煤til imprimir solo las primeras filas en la consola en lugar de imprimir todas las filas.
Esto se puede hacer llamando al head()
m茅todo en el DataFrame como se muestra a continuaci贸n:
data.head()
Para nuestros datos anteriores, el comando anterior devuelve solo las primeras 5 filas del conjunto de datos, lo que le permite inspeccionar una peque帽a muestra de los datos. Esto se muestra a continuaci贸n:
Salida:
Number Type Capacity
0 SSD Premio 1800
1 KCN Fielder 1500
2 USG Benz 2200
3 TCH BMW 2000
4 KBQ Range 3500
El loc()
m茅todo es una buena utilidad que nos ayuda a leer solo ciertas filas de una columna espec铆fica en el conjunto de datos, como se demuestra en el siguiente ejemplo:
import pandas as pd
data = pd.read_csv('cars.csv')
print (data.loc[[0, 4, 7], ['Type']])
Salida:
Type
0 Premio
4 Range
7 Fielder
Aqu铆 usamos el loc()
m茅todo para leer solo los elementos en los 铆ndices 0, 4 y 7 de la columna Tipo.
A veces, es posible que Wwe solo necesite leer ciertas columnas y no otras. Esto tambi茅n se puede hacer usando el loc()
m茅todo, que se muestra a continuaci贸n en este ejemplo:
import pandas as pd
data = pd.read_csv('cars.csv')
print (data.loc[:, ['Type', 'Capacity']])
Salida:
Type Capacity
0 Premio 1800
1 Fielder 1500
2 Benz 2200
3 BMW 2000
4 Range 3500
5 Premio 1800
6 Benz 2200
7 Fielder 1500
8 BMW 2000
9 Range 3200
Aqu铆 usamos el loc()
m茅todo para leer todas las filas (la :
parte) de solo dos de nuestras columnas del conjunto de datos, es decir, las columnas Tipo y Capacidad, como se especifica en el argumento.
Importaci贸n de datos de Excel
Adem谩s del read_csv
m茅todo, Pandas tambi茅n tiene la read_excel
funci贸n que se puede usar para leer datos de Excel en un Pandas DataFrame. En este ejemplo, usaremos un archivo de Excel llamado Workers.xlsx con detalles de los trabajadores de una empresa.
El siguiente c贸digo se puede usar para cargar el contenido del archivo de Excel en un Pandas DataFrame:
import pandas as pd
data = pd.read_excel('workers.xlsx')
print (data)
Salida:
ID Name Dept Salary
0 1 John ICT 3000
1 2 Kate Finance 2500
2 3 Joseph HR 3500
3 4 George ICT 2500
4 5 Lucy Legal 3200
5 6 David Library 2000
6 7 James HR 2000
7 8 Alice Security 1500
8 9 Bosco Kitchen 1000
9 10 Mike ICT 3300
Despu茅s de llamar a la read_excel
funci贸n, pasamos el nombre del archivo como argumento, que read_excel
sol铆a abrir / cargar el archivo y luego analizar los datos. La print()
funci贸n luego nos ayuda a mostrar el contenido del DataFrame, como lo hemos hecho en ejemplos anteriores.
Y al igual que con nuestro ejemplo de CSV, esta funci贸n se puede combinar con el loc()
m茅todo para ayudarnos a leer filas y columnas espec铆ficas del archivo de Excel.
Por ejemplo:
import pandas as pd
data = pd.read_excel('workers.xlsx')
print (data.loc[[1,4,7],['Name','Salary']])
Salida:
Name Salary
1 Kate 2500
4 Lucy 3200
7 Alice 1500
Hemos utilizado el loc()
m茅todo para recuperar los valores de Nombre y Salario de los elementos en los 铆ndices 1, 4 y 7.
Pandas tambi茅n nos permite leer desde dos hojas de Excel simult谩neamente. Supongamos que nuestros datos anteriores est谩n en Sheet1 y tenemos otros datos en Sheet2 del mismo archivo de Excel. El siguiente c贸digo muestra c贸mo podemos leer de las dos hojas simult谩neamente:
import pandas as pd
with pd.ExcelFile('workers.xlsx') as x:
s1 = pd.read_excel(x, 'Sheet1')
s2 = pd.read_excel(x, 'Sheet2')
print("Sheet 1:")
print (s1)
print("")
print("Sheet 2:")
print (s2)
Salida:
Sheet 1:
ID Name Dept Salary
0 1 John ICT 3000
1 2 Kate Finance 2500
2 3 Joseph HR 3500
3 4 George ICT 2500
4 5 Lucy Legal 3200
5 6 David Library 2000
6 7 James HR 2000
7 8 Alice Security 1500
8 9 Bosco Kitchen 1000
9 10 Mike ICT 3300
Sheet 2:
ID Name Age Retire
0 1 John 55 2023
1 2 Kate 45 2033
2 3 Joseph 55 2023
3 4 George 35 2043
4 5 Lucy 42 2036
5 6 David 50 2028
6 7 James 30 2048
7 8 Alice 24 2054
8 9 Bosco 33 2045
9 10 Mike 35 2043
Lo que pas贸 es que combinamos la read_excel()
funci贸n con la ExcelFile
clase contenedora. La variable x
se cre贸 al llamar a la clase contenedora y la with
palabra clave Python, que usamos para abrir temporalmente el archivo.
A partir de la ExcelFile
variable x
, hemos creado dos variables m谩s, s1
y s2
para representar los contenidos que se leyeron de las diferentes hojas.
Luego usamos print
declaraciones para ver el contenido de las dos hojas en la consola. La print
declaraci贸n en blanco , print("")
solo se utiliza para imprimir una l铆nea en blanco entre los datos de nuestra hoja.
Negociaci贸n de datos
La manipulaci贸n de datos es el proceso de procesamiento de datos para prepararlos para su uso en el siguiente paso. Los ejemplos de procesos de disputa de datos incluyen fusi贸n, agrupaci贸n y concatenaci贸n. Este tipo de manipulaci贸n a menudo se necesita en la ciencia de datos para que sus datos est茅n en una forma que funcione bien con cualquier an谩lisis o algoritmo que vaya a realizar.
Fusi贸n
La biblioteca de Pandas nos permite unir objetos DataFrame a trav茅s de la merge()
funci贸n. Creemos dos DataFrames y demostremos c贸mo fusionarlos.
Esta es la primera trama de datos, df1
:
import pandas as pd
d = {
'subject_id': ['1', '2', '3', '4', '5'],
'student_name': ['John', 'Emily', 'Kate', 'Joseph', 'Dennis']
}
df1 = pd.DataFrame(d, columns=['subject_id', 'student_name'])
print(df1)
Salida:
subject_id student_name
0 1 John
1 2 Emily
2 3 Kate
3 4 Joseph
4 5 Dennis
Aqu铆 est谩 el c贸digo para crear el segundo DataFrame df2
:
import pandas as pd
data = {
'subject_id': ['4', '5', '6', '7', '8'],
'student_name': ['Brian', 'William', 'Lilian', 'Grace', 'Caleb']
}
df2 = pd.DataFrame(data, columns=['subject_id', 'student_name'])
print(df2)
Salida:
subject_id student_name
0 4 Brian
1 5 William
2 6 Lilian
3 7 Grace
4 8 Caleb
Ahora necesitamos fusionar los dos DataFrames, es decir, df1
y a lo df2
largo de los valores de subject_id
. Simplemente llamamos a la merge()
funci贸n como se muestra a continuaci贸n:
pd.merge(df1, df2, on='subject_id')
Salida:
subject_id student_name_x student_name_y
0 4 Joseph Brian
1 5 Dennis William
Lo que hace la fusi贸n es que devuelve las filas de ambos DataFrames con el mismo valor para la columna que est谩 utilizando para la fusi贸n.
Hay muchas otras formas de usar la pd.merge
funci贸n que no cubriremos en este art铆culo, como qu茅 datos deben combinarse, c贸mo deben combinarse, si deben ordenarse, etc. Para obtener m谩s informaci贸n, consulte el documento oficial. documentaci贸n sobre la funci贸n de combinaci贸n .
Agrupamiento
Agrupar es el proceso de colocar datos en varias categor铆as. Aqu铆 hay un ejemplo simple:
# import pandas library
import pandas as pd
raw = {
'Name': ['John', 'John', 'Grace', 'Grace', 'Benjamin', 'Benjamin', 'Benjamin',
'Benjamin', 'John', 'Alex', 'Alex', 'Alex'],
'Position': [2, 1, 1, 4, 2, 4, 3, 1, 3, 2, 4, 3],
'Year': [2009, 2010, 2009, 2010, 2010, 2010, 2011, 2012, 2011, 2013, 2013, 2012],
'Marks':[408, 398, 422, 376, 401, 380, 396, 388, 356, 402, 368, 378]
}
df = pd.DataFrame(raw)
group = df.groupby('Year')
print(group.get_group(2010))
Salida:
Marks Name Position Year
1 398 John 1 2010
3 376 Grace 4 2010
5 380 Benjamin 4 2010
En este sencillo ejemplo, hemos agrupado los datos por a帽o, que en este caso fue 2010. Tambi茅n podr铆amos haberlos agrupado por cualquiera de las otras columnas, como “Nombre”, “Posici贸n”, etc.
Concatenaci贸n
La concatenaci贸n de datos, que b谩sicamente significa agregar un conjunto de datos a otro, se puede realizar llamando a la concat()
funci贸n.
Demostremos c贸mo concatenar DataFrames usando nuestros dos Dataframes anteriores, es decir, df1
y df2
, cada uno con dos columnas, “subject_id” y “student_name”:
print(pd.concat([df1, df2]))
Salida:
subject_id student_name
0 1 John
1 2 Emily
2 3 Kate
3 4 Joseph
4 5 Dennis
0 4 Brian
1 5 William
2 6 Lilian
3 7 Grace
4 8 Caleb
Estad铆sticas descriptivas
Como mostr茅 brevemente antes, cuando usamos la describe()
funci贸n obtenemos las estad铆sticas descriptivas para columnas num茅ricas, pero las columnas de caracteres est谩n excluidas.
Primero creemos un DataFrame que muestre los nombres de los estudiantes y sus puntajes en matem谩ticas e ingl茅s:
import pandas as pd
data = {
'Name': ['John', 'Alice', 'Joseph', 'Alex'],
'English': [64, 78, 68, 58],
'Maths': [76, 54, 72, 64]
}
df = pd.DataFrame(data)
print(df)
Salida:
English Maths Name
0 64 76 John
1 78 54 Alice
2 68 72 Joseph
3 58 64 Alex
Solo tenemos que llamar a la describe()
funci贸n en el DataFrame y obtener las diversas medidas como la media, la desviaci贸n est谩ndar, la mediana, el elemento m谩ximo, el elemento m铆nimo, etc.
df.describe()
Salida:
English Maths
count 4.000000 4.000000
mean 67.000000 66.500000
std 8.406347 9.712535
min 58.000000 54.000000
25% 62.500000 61.500000
50% 66.000000 68.000000
75% 70.500000 73.000000
max 78.000000 76.000000
Como puede ver, el describe()
m茅todo ignor贸 por completo la columna “Nombre” ya que no es num茅rica, que es lo que queremos. Esto simplifica las cosas para la persona que llama, ya que no necesita preocuparse por eliminar columnas no num茅ricas antes de calcular las estad铆sticas num茅ricas que desea.
Conclusi贸n
Pandas es una biblioteca de Python extremadamente 煤til, particularmente para la ciencia de datos. Varias funcionalidades de Pandas hacen que el preprocesamiento de datos sea extremadamente simple. Este art铆culo proporciona una breve introducci贸n a las principales funcionalidades de la biblioteca. En este art铆culo, vimos ejemplos pr谩cticos de todas las principales utilidades de la biblioteca Panda. Para aprovechar al m谩ximo Pandas, le sugiero que practique los ejemplos de este art铆culo y tambi茅n pruebe la biblioteca con sus propios conjuntos de datos. 隆Feliz codificaci贸n!