<jupyter_start><jupyter_text>Nuevas estructuras de datosPANDAs = PANel DAta Structure`pandas` introduce tres nuevos tipos de estructura de datos:* `Series` : Es una estructura de datos de 1D, como si fuera un vector de datos con índices.* `DataFrame` : Es una estructura de datos de 2D, como si fuera un diccionario de `Series`.* `Panel` : Es una estructura de datos de nD (con $n \ge 3$), como si fuera un diccionario de `DataFrame`s. ![](imgs/Estructuras.png)(imagen extraída de [aquí](https://github.com/jonathanrocher/pandas_tutorial/blob/master/analyzing_and_manipulating_data_with_pandas_manual.pdf))<jupyter_code>import pandas as pd
import numpy as np
import matplotlib.pyplot as plt

np.random.seed(19760812)
%matplotlib inline
s = pd.Series()
df = pd.DataFrame()
p = pd.Panel()
print(s, df, p, sep = '\n' * 2)<jupyter_output><empty_output><jupyter_text>`Series` Una `Series` es un array indexado:• Un NumPy array mapea un rango de números enteros a valores.• Una `Series` mapea un grupo arbitrario de etiquetas a valores.• Una `Series` se puede ver también como un diccionario especializado donde todos los valores poseen el mismo tipo y se encuentran almacenados de forma eficiente.<jupyter_code>s = pd.Series({'a' : 1000, 'b' : 2000, 'c' : 3000, 'd' : 4000})
s['b']<jupyter_output><empty_output><jupyter_text>Para acceder a las etiquetas se usa el atributo `s.index` mientras que para acceder a los valores se usa el atributo `s.values` (NumPy array).<jupyter_code>help(pd.Series)
lista = [1,10,100,1000]
dicc = {'a': 1, 'b': 10, 'c': 100, 'd': 1000}
# creación a partir de una lista
s1 = pd.Series(data = lista, index = ['a','b','c','d'], name = '<NAME>')
# creación a partir de un diccionario
s2 = pd.Series(data = dicc, name = '<NAME>')
# cread s3 a partir de un numpy array



s1
s2
s1.index
s1.values
# Acceder a un elemento, como si fuera un diccionario
s1['a']
# Acceder a un elemento como si fuera un numpy array
s1[0]
s1[0:3]
s1['a':'c']
# Se pueden añadir nuevos elementos como si fuera un diccionario
s1['e'] = 10000
s1
s2
# Podemos hacer operaciones como si fueran numpy arrays
s1 / 10
# Alineamiento de índices, las operaciones se hacen vía índice
s1 + s2<jupyter_output><empty_output><jupyter_text>`DataFrame` Un `DataFrame` puede considerarse que es como un diccionario de `Series` que comparten índices comunes:• `Dataframes` tienen índices para filas (index) y columnas (columns).• Cada columna puede poseer un tipo de dato diferente.• Añadir nuevas columnas es 'barato'.<jupyter_code>df = pd.DataFrame(np.random.randn(10, 3), columns = ['col1', 'col2', 'col3'])
df<jupyter_output><empty_output><jupyter_text>Pensad en un `DataFrame` como en una 'pestaña' (hoja) de una hoja de cálculos, o en una tabla en una Base de Datos SQL.<jupyter_code>help(pd.DataFrame)
# Cread un dataframe a partir de s1 y s2


# Cread un dataframe a partir de un diccionario de numpy arrays


# Se puede acceder a una columna (una Series) como si accediéramos a la clave de un diccionario
df['col1']
# Podemos acceder a los índices como si fuera una Series
df.index
# Además, podemos acceder a las columnas
df.columns<jupyter_output><empty_output><jupyter_text>`Panel` Se puede ver como un diccionario de `DataFrame`s. Para no sobrecargar el vistazo que vamos a hacer a `pandas` no hablaremos más sobre `Panel`es ya que es una estructura de datos que se usa menos en la práctica.<jupyter_code>help(pd.Panel)<jupyter_output><empty_output>
{'fraction_non_alphanumeric': 0.10459035444509006, 'fraction_numerical': 0.02440441603718768, 'mean_word_length': 5.329044117647059, 'pattern_counts': {'":': 0, '<': 27, '<?xml version=': 0, '>': 27, 'https://': 1, 'lorem ipsum': 0, 'www.': 0, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 0, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'chain_length': '6', 'dir': 'jupyter-structured-clean-dedup', 'id': '526509', 'license': 'MIT', 'n_tokens_mistral': 1330, 'n_tokens_neox': 1261, 'n_words': 447, 'path': 'workshops_materials/20160408_1100_Pandas_for_beginners/tutorial/Tutorial 01 - Estructuras de datos.ipynb', 'repo_name': 'PyDataMadrid2016/Conference-Info', 'size': '3446'}