<jupyter_start><jupyter_text>Pandas<img src="https://raw.githubusercontent.com/INGEOTEC/diplo2019/master/notebooks/img/pandas_logo.png" width="600"> Python Data Analysis LibraryPandas es una librería de open source que permite el uso fácil de estructuras de datos y herramientas de análisis utilizando el lenguaje de programación Python.<jupyter_code># Para usarlo primero hay que importarlo
from pandas import Series, DataFrame
import pandas as pd
datos = {'Nombre': ['Ana', 'Maria', 'Lucia', 'Jorge', 'Carlos'], 
        'year': [2012, 2012, 2013, 2014, 2014], 
        'reports': [4, 24, 31, 2, 3]}

df = pd.DataFrame(datos, index = ['Mexico', 'Aguascalientes', 
                                  'Guadalajara', 'Monterrey', 'Sinaloa'])

df
df[:2]
df[0:3]
#Acceso a los datos
print(df['Nombre']) #Acceso a los atributos o columnas
print('\n')
print(df['reports'])
print('\n')
print(df['year'])
#Acceso a los valores de un registro en un atributo especifico
print(df.Nombre[0])
print(df.Nombre[1])
print(df.Nombre[2])
print(df.Nombre[3])
print(df.Nombre[4])
#df.Nombre[5]  

#conocer las dimensiones del dataframe
print('\n')
print(df.shape)
len(df)
#También podemos buscar por un valor en especifico
row = df.xs('Aguascalientes')
print(row)
col = df.xs('Nombre', axis=1)
print('\n')
print(col)

print(row['Nombre'])
print(row['reports'])
print(row['year'])
print(col['Aguascalientes'])
print(col['Sinaloa'])

roww = df.ix[1] # Porque no podemos hacer df[0]
roww

dfmi = df.copy()  #Copiar un dataframe
dfmi
df.index
#Recorrer todos los elementos del dataframe
for index, row in df.iterrows():
    print(row)
    print(index)
    print('\n')
#Recorrer todos los elementos del dataframe
for index, row in df.iterrows():
    nombre = row['Nombre']
    print(nombre)
#Recorrer todos los elementos del dataframe
for columna, valor in df.iteritems():
    print(columna)
    print(valor)
    print('\n')
df.values
df.describe()
#Estadísticas en los dataframes
print(df.mean())

#También aplica count, sum, median, min, max, abs, prod, etc.
print('\n')
print(df.min())<jupyter_output>reports      12.8
year       2013.0
dtype: float64


Nombre      Ana
reports       2
year       2012
dtype: object<jupyter_text><jupyter_code>#Borrando filas u observaciones
df.drop(['Aguascalientes', 'Mexico'], inplace=True)
df
#Borrando variables
df.drop('year', axis=1, inplace=True)
df.head() # Nos ayuda a ver los n primeros elementos del dataframe
df.head(2)
df.tail(1) #Nos muestra los últimos n elementos del Dataframe
#Seleccionamos una observación siempre y cuando contenga un 
#determinado valor
df_n = df[df.Nombre != 'Carlos']
df_n
## También podemos modificar los valores del dataframe
df_2 = df #Hacemos una copia del Dataframe

print(df_2)

df_2['year'] = 2015 #Asignamos 2015 a toda la columna year

print(df)
#Igualamos a 10 a toda la fila de index Aguascalientes
df_2[df_2.index=="Guadalajara"]=10 

df_2


df
# Si queremos modificar un valor especifico, 
# por ejemplo el nombre del Registro con índice "Guadalajara"
# utilizamos la opción loc

df_2.loc[df_2.index=="Guadalajara","Nombre"] = 'Alejandra'
df_2
#Colocando valores en un renglón especifico y columna especifica
df_2.iat[0,1] = 1000

df_2
#Selección de fragmentos del dataframe
df_2[df_2.index=="Guadalajara"]['Nombre']

df_2[df_2.reports >=100]['year']
import numpy as np
df_numeros = pd.DataFrame({
'one' : pd.Series(np.random.randn(3), 
index=['a', 'b', 'c']),
'two' : pd.Series(np.random.randn(4), 
index=['a', 'b', 'c', 'd']),
'three' : pd.Series(np.random.randn(3), 
index=['b', 'c', 'd'])})


df_numeros
df_numeros.columns = ['C1','C2','C3']
df_numeros
df_numeros[df_numeros.C1 > 0]
df_numeros[df_numeros > 0]
#Re-indexado

df_numeros = df_numeros.reindex(index=list(df_numeros.index)+['e'], 
                        columns=list(df_numeros.columns) + ['C4'])
df_numeros

df_numeros[df_numeros.C1 > 0]
df_numeros[df_numeros > 0]
#Missing data
#To drop any rows that have missing data.
#Si alguno elemento de la observación tiene missing data 
#borra toda la observación
df_numeros_nona = df_numeros.dropna(how='any')

#Si todos los elementos son NAN borra la observación

df_numeros_nona
df_numeros_nona = df_numeros.dropna(how='all', axis=1)

df_numeros_nona


#Filling missing data
df_numeros_nona = df_numeros.fillna(value=5)
df_numeros_nona
dframe = pd.DataFrame(np.random.randn(8, 4), 
        columns=['A','B','C','D'])
dframe

s=dframe.iloc[3] #Copiamos un valor de dataframe
s
#Agregar un renglón al dataframe
df_nuevo=dframe.append(s,ignore_index=True)
df_nuevo
df_nuevo
#Seleccionar por posición

df.iloc[1:3,:] # rebanadas por renglones
df.iloc[:,1:3] # Rebanadas por columas
df.iloc[1,1] # Tomando un valor explicitamente 
df.iloc[:1,:1]
''' Existen métodos de comparación booleana para 
los Dataframes: eq, ne, lt, gt, le, y ge.
 eq : igual a 
 ne: no igual a
 lt: menor que
 gt: mayor que
 le y ge : menore igual, mayor e igual
'''
df2=df
df.eq(df2)

import numpy as np
#Apply 
frame = DataFrame(np.random.randn(4, 3), 
                columns=list('bde'), 
                  index=['Utah', 'Ohio', 'Texas', 'Oregon'])

frame
f=frame.apply(np.sqrt) # regresa un DataFrame
f

f=frame.apply(np.sum, axis=1) #axis=0 columnas, axis=1 filas
f
#Ordena por ejes (por el nombre de los ejes)
frame.sort_index(axis=1, ascending=True,inplace=True) 
frame
#Ordena por valores
frame.sort_values("e",ascending=True, inplace=True) 
frame
frame2 = DataFrame({'b': [4, 7, -3, 2], 'a': [0, 1, 0, 1]})
f_2 = frame2.sort_values(by=['b','a'], ascending=False)
print(frame2,'\n')
print(f_2)<jupyter_output>a  b
0  0  4
1  1  7
2  0 -3
3  1  2 

   a  b
1  1  7
0  0  4
3  1  2
2  0 -3<jupyter_text>Ejercicio con pandas- Leer datos desde archivo.<jupyter_code>Datos=pd.read_csv("DATOS_Ej.csv", index_col=0)
Datos
np.RAISE?<jupyter_output><empty_output><jupyter_text>Ejercicio con pandas- Leer datos desde archivo.- Muestren los primeros 10- Muestren los últimos 10- Muestren solo los nombres de los propietarios- Agregar una columna de Edad- Asignar una edad a cada registro (como prefieran)- Agregar 10 registros, uno por cada compañero de clase (puede inventar los datos, excepto el nombre)- Cuenten cuántas casas y departamentos hay (tipo de bien) en la BD- Me digan cuantos Juan son propietarios- Llenar los missing data con el valor predominante en cada columna- Contar cuantos elementos hay de cada columna- Copien la BD a otro Dataframe- En el nuevo Dataframe    - Borrar todos los registros de localidad Laraquete    - Borrar las fichas con valore entre 30 y 60.<jupyter_code><jupyter_output><empty_output>
{'fraction_non_alphanumeric': 0.12855621481819565, 'fraction_numerical': 0.027689030883919063, 'mean_word_length': 4.696707105719238, 'pattern_counts': {'":': 0, '<': 16, '<?xml version=': 0, '>': 21, 'https://': 1, 'lorem ipsum': 0, 'www.': 0, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 2, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'chain_length': '4', 'dir': 'jupyter-structured-clean-dedup', 'id': '364920', 'license': 'Apache-2.0', 'n_tokens_mistral': 2699, 'n_tokens_neox': 2569, 'n_words': 722, 'path': 'notebooks/01-Python-002.ipynb', 'repo_name': 'INGEOTEC/diplo2019', 'size': '6573'}