Herramientas de usuario

Herramientas del sitio


informatica:programacion:python:modulos:pandas

Diferencias

Muestra las diferencias entre dos versiones de la página.

Enlace a la vista de comparación

Ambos lados, revisión anteriorRevisión previa
Próxima revisión
Revisión previa
informatica:programacion:python:modulos:pandas [2021/06/15 16:38] tempwininformatica:programacion:python:modulos:pandas [2021/11/08 16:11] (actual) – [Filtrar registros Excel] tempwin
Línea 5: Línea 5:
   * [[https://pandas.pydata.org/|Web oficial]]   * [[https://pandas.pydata.org/|Web oficial]]
  
 +Pandas está construido sobre NumPy. Sus estructuras de datos básicas son **Series** y **DataFrame**
 ===== Instalación ===== ===== Instalación =====
  
Línea 22: Línea 22:
 <code python> <code python>
 import pandas as pd import pandas as pd
 +from pandas import Series, DataFrame
 </code> </code>
  
Línea 30: Línea 31:
 ==== Series ==== ==== Series ====
  
-Para crear una serie de panda a partir de una **lista**:+''Series'' en Python es un objeto similar a un array de una dimensión. 
 + 
 +Para crear una serie de pandas a partir de una **lista**:
  
 <code python> <code python>
-import panda as pd+import pandas as pd
  
 helados = ["Chocolate", "Vainilla", "Fresa", "Limón"] helados = ["Chocolate", "Vainilla", "Fresa", "Limón"]
Línea 40: Línea 43:
  
 # Resultado # Resultado
 +
 # 0    Chocolate # 0    Chocolate
 # 1     Vainilla # 1     Vainilla
Línea 49: Línea 53:
 En la parte izquierda está el índice. No tiene por qué ser índice numérico. En la parte izquierda está el índice. No tiene por qué ser índice numérico.
  
-Para crear una serie de panda a partir de un **diccionario**:+Para crear una serie de pandas a partir de un **diccionario**:
  
 <code python> <code python>
Línea 61: Línea 65:
 pd.Series(webster) pd.Series(webster)
  
-# Resultado+# Resultado
 # Plátano    Fruta deliciosa # Plátano    Fruta deliciosa
 # Púrpura           Un color # Púrpura           Un color
Línea 105: Línea 110:
   * ''*.sum()'': suma los elementos de una serie   * ''*.sum()'': suma los elementos de una serie
   * ''*.prod()'': multiplicación de todos los elementos de la serie.   * ''*.prod()'': multiplicación de todos los elementos de la serie.
-  * ''*.mean()'': devuelve la media de los elementos de la serie.+  * ''*.mean()'': devuelve la media aritmética de los elementos de la serie.
   * ''*.head()'': devuelve, por defecto, los primeros 5 elementos de la serie. Entre paréntesis se puede indicar el número de elementos a devolver.   * ''*.head()'': devuelve, por defecto, los primeros 5 elementos de la serie. Entre paréntesis se puede indicar el número de elementos a devolver.
   * ''*.tail()'': devuelve, por defecto, los últimos 5 elementos de la serie. Entre paréntesis se puede indicar el número de elementos a devolver.   * ''*.tail()'': devuelve, por defecto, los últimos 5 elementos de la serie. Entre paréntesis se puede indicar el número de elementos a devolver.
Línea 121: Línea 126:
  
 <WRAP center round tip 60%> <WRAP center round tip 60%>
-''dtype: object'' es la forma que tiene Panda de referirse a las cadenas de caracteres (strings)+''dtype: object'' es la forma que tiene Pandas de referirse a las cadenas de caracteres (strings)
 </WRAP> </WRAP>
  
Línea 134: Línea 139:
  
 # Resultado: # Resultado:
 +
 # >>> numeros # >>> numeros
 # 3     0.3 # 3     0.3
Línea 156: Línea 162:
  
 # Resultado: # Resultado:
 +
 # True # True
 </code> </code>
Línea 227: Línea 234:
 ===== DataFrame ===== ===== DataFrame =====
  
-Las series son estructuras de una dimensión (una columna de datos). Un DataFrame es una estructura bidimensional, consiste en filas y columnas, como una **tabla**.+Las series son estructuras de una dimensión (una columna de datos). Un ''DataFrame'' es una estructura bidimensional, consiste en filas y columnas, como una **tabla**.
  
 {{:informatica:programacion:python:modulos:pandas:pandas-dataframe.png|}} {{:informatica:programacion:python:modulos:pandas:pandas-dataframe.png|}}
Línea 260: Línea 267:
 Si aparece ''NaN'' es la forma que tiene Pandas de indicar que falta el valor. Si aparece ''NaN'' es la forma que tiene Pandas de indicar que falta el valor.
 </WRAP> </WRAP>
 +
 +Ejemplo de un DataFrame creado a partir de un diccionario:
 +
 +<code python>
 +purchases = [{'Customer': 'Bob', 'Item': 'Oranges', 'Quantity': 2, 'Unit price': 2},
 +             {'Customer': 'Bob', 'Item': 'Apples', 'Quantity': 3, 'Unit price': 1},
 +             {'Customer': 'Bob', 'Item': 'Milk', 'Quantity': 1, 'Unit price': 4},
 +             {'Customer': 'Alice', 'Item': 'Oranges', 'Quantity': 2, 'Unit price': 2},
 +             {'Customer': 'Alice', 'Quantity': 2, 'Unit price': 3}]
 +df = DataFrame(purchases)
 +
 +df
 +
 +# Resultado:
 +
 +#   Customer     Item  Quantity  Unit price
 +# 0      Bob  Oranges                   2
 +# 1      Bob   Apples                   1
 +# 2      Bob     Milk                   4
 +# 3    Alice  Oranges                   2
 +# 4    Alice      NaN                   3
 +</code>
  
 ==== Métodos ==== ==== Métodos ====
Línea 277: Línea 306:
   * ''*.describe()'': realiza varias operaciones a la vez.   * ''*.describe()'': realiza varias operaciones a la vez.
   * ''*.nunique()'': devuelve los valores únicos de una columna.   * ''*.nunique()'': devuelve los valores únicos de una columna.
 +
 +<WRAP center round important 60%>
 +La mayoría de las funciones de DataFrames devuelven un objeto **nuevo** de pandas. Si queremos realizar una operación y que se modifique el propio objeto, debemos pasarle el argumento ''inplace=True'')
 +</WRAP>
 +
  
 <code> <code>
Línea 373: Línea 407:
 <code python> <code python>
 # Eliminar la fila que ocupa la posición 10: # Eliminar la fila que ocupa la posición 10:
-sales.drop(10)+new_sales = sales.drop(10)
 </code> </code>
  
 +Si queremos que se modifique el DataFrame en lugar de hacer una copia de él:
 +
 +<code python>
 +# Eliminar la fila que ocupa la posición 10:
 +sales.drop(10, inplace=True)
 +</code>
 ==== Eliminar columnas ==== ==== Eliminar columnas ====
  
Línea 384: Línea 424:
 sales.drop(10, axis = 1) sales.drop(10, axis = 1)
 </code> </code>
 +
 +<WRAP center round tip 60%>
 +También podemos indicar el nombre de la columna en lugar de la posición: ''sales.drop(%%"%%Nacionalidad%%"%%, axis=1)''
 +</WRAP>
  
 También podemos borrarla utilizando la función ''del'': También podemos borrarla utilizando la función ''del'':
Línea 516: Línea 560:
  
 <code python> <code python>
-sales.sort_values("Salary")+sales.sort_values(by="Salary")
 </code> </code>
  
Línea 1185: Línea 1229:
 output.to_excel("demo_mod.xlsx", index=False) output.to_excel("demo_mod.xlsx", index=False)
 </code> </code>
 +
 +==== Titanic ====
 +
 +Partiendo de un CSV con información sobre pasajeros:
 +
 +<code python>
 +import pandas as pd
 +
 +fname = '~/data/titanic/train.csv'
 +
 +data = pd.read_csv(fname)
 +</code>
 +
 +Ver si hay campos vacíos:
 +
 +<code python>
 +data.count()
 +</code>
 +
 +Valores mínimos y máximos de edad:
 +
 +<code python>
 +data['Age'].min(), data['Age'].max()
 +</code>
 +
 +Distribución de valores de supervivientes:
 +
 +<code python>
 +data['Survived'].value_counts()
 +</code>
 +
 +En términos porcentuales:
 +
 +<code python>
 +data['Survived'].value_counts() * 100 / len(data)
 +</code>
 +
 +Distribución por sexo:
 +
 +<code python>
 +data['Sex'].value_counts()
 +</code>
 +
 +Distribución por tipo de pasajero:
 +
 +<code python>
 +data['Pclass'].value_counts()
 +</code>
 +
 +Representación gráfica (en notebook de Jupyter):
 +
 +<code python>
 +%matplotlib inline
 +
 +alpha_color = 0.5
 +
 +# Distribución se supervivientes
 +data['Survived'].value_counts().plot(kind='bar')
 +</code>
 +
 +Distribución gráfica por sexo:
 +
 +<code python>
 +data['Sex'].value_counts().plot(kind='bar',
 +                                color=['b', 'r'],
 +                                alpha=alpha_color)
 +</code>
 +
 +Distribución gráfica por clase de pasajeros:
 +
 +<code python>
 +data['Pclass'].value_counts().sort_index().plot(kind='bar',
 +                                                alpha=alpha_color)
 +</code>
 +
 +Comparando gráficamente supervivientes con edades:
 +
 +<code python>
 +data.plot(kind='scatter', x='Survived', y='Age')
 +</code>
 +
 +Comparando gráficamente supervivientes con tramos de edades:
 +
 +<code python>
 +bins = [0, 10, 20, 30, 40, 50, 60, 70, 80]
 +
 +data['AgeBin'] = pd.cut(data['Age'], bins)
 +
 +data[data['Survived'] == 1]['AgeBin'].value_counts().sort_index().plot(kind='bar')
 +</code>
 +
 +Gráficamente los que no sobrevivieron:
 +
 +<code python>
 +data[data['Survived'] == 0]['AgeBin'].value_counts().sort_index().plot(kind='bar')
 +</code>
 +
 +<code python>
 +data['AgeBin'].value_counts().sort_index().plot(kind='bar')
 +</code>
 +
 +Pasajeros de primera clase que sobrevivieron:
 +
 +<code python>
 +data[data['Pclass'] == 1]['Survived'].value_counts().plot(kind='bar')
 +</code>
 +
 +Pasajeros de tercera clase que sobrevivieron:
 +
 +<code python>
 +data[data['Pclass'] == 3]['Survived'].value_counts().plot(kind='bar')
 +</code>
 +
 +Pasajeros de género masculino que sobrevivieron:
 +
 +<code python>
 +data[data['Sex'] == 'male']['Survived'].value_counts().plot(kind='bar')
 +</code>
 +
 +Pasajeros de género femenino que sobrevivieron:
 +
 +<code python>
 +data[data['Sex'] == 'female']['Survived'].value_counts().plot(kind='bar')
 +</code>
 +
 +Pasajeros de género masculino y primera clase que sobrevivieron:
 +
 +<code python>
 +data[(data['Sex'] == 'male') & (data['Pclass'] == 1)]['Survived'].value_counts().plot(kind='bar')
 +</code>
 +
 +Pasajeros de género masculino y tercera clase que sobrevivieron:
 +
 +<code python>
 +data[(data['Sex'] == 'male') & (data['Pclass'] == 3)]['Survived'].value_counts().plot(kind='bar')
 +</code>
 +
 +Pasajeros de género femenino y primera clase que sobrevivieron:
 +
 +<code python>
 +data[(data['Sex'] == 'female') & (data['Pclass'] == 1)]['Survived'].value_counts().plot(kind='bar')
 +</code>
 +
 +Pasajeros de género femenino y tercera clase que sobrevivieron:
 +
 +<code python>
 +data[(data['Sex'] == 'female') & (data['Pclass'] == 3)]['Survived'].value_counts().plot(kind='bar')
 +</code>
 +
 +
 +===== Recursos =====
 +
 +  * https://github.com/bonzanini/VideoCourse-DataAnalysisPython
informatica/programacion/python/modulos/pandas.1623767919.txt.gz · Última modificación: por tempwin