lunes, 15 de agosto de 2016

Apuntes sobre DataFrame con PANDAS

El siguiente script reune funcionalidades de un DataFrame de pandas:
  • Crear un DataFrame
  • Join / Concatenar / Group by
  • Agregar/Editar Columna
  • Filtrar Datos
  • Explorar

script:
import pandas as pd
import numpy as np


# CREAR UN DATA FRAME
# -----------------------------------------------------------------
# crear dataframe con datos aleatorios
df0 = pd.DataFrame(np.random.randn(5, 4), columns=['a', 'b', 'c', 'd'])
#crear dataframe con datos inline. metodo 1
df1 = pd.DataFrame([[1,2],[11,22],[111,222]],columns=["uno","dos"])
# crear dataframe con datos inline. metodo 2
df1_dsc = pd.DataFrame({'uno':[1,11,111] , 'desc':['unidad','decena','centena']})
df2 = pd.DataFrame({'uno':[1,11,111] , 'dos':[2,22,222]})

# JOIN / CONCATENAR / GROUP BY
# -----------------------------------------------------------------
# concatena dos DataFrame. metodo 1
df3 = pd.concat([df1, df2])
# concatena dos DataFrame. metodo 2
df4 = df1.append(df2)
# inner join. metodo 1
df5 = pd.merge(df3, df1_dsc, on='uno')
# GRUOP BY: metodo 1
agg1 = df5.groupby(['desc'], axis=0).sum()
# GRUOP BY: metodo 2
agg2 = df5[['desc','uno']].groupby(['desc'], axis=0).sum()


# AGREGAR/EDITAR COLUMNA
# -----------------------------------------------------------------
# Agregar una columna inline
df = pd.DataFrame()
df['tres']=[3,33,333]
# Agregar columna que calcula longitudad de otra columna
df['lon_tres'] = df['tres'].apply(lambda x: len(str(x)))
# Crea una variable con menores de edad = 1
df = pd.read_csv('https://www.dropbox.com/s/cugxdc9mhau4nw1/titanic2.csv?dl=1')
df["child"] = int(0)
df["child"][df["age"] < 18] = 1
# reemplaza el valor de un texto en una columna
df5['desc'].replace("unidad","unidades", inplace=True)
df5['desc'].replace("decena","decenas", inplace=True)
df5['desc'].replace("centena","centenas", inplace=True)
#elimina texto en parentesis
df8 = pd.DataFrame({'uno':[1,11,111] , 'desc':['unidad(uno)','decena(dos)','centena(tres)']})
df8['desc'] = df8['desc'].str.replace(r"\(.*\)","")
# sumar 2 columnas en una nueva
df['embarque'] = df['embarked_c'] + df['embarked_s']
# cambiar nombre deuna columna
df8.rename(columns={'desc':'descripcion', 'uno':'valor'}, inplace = True) 
# Borrar una columna. tecnica 1
df5.drop('desc', axis = 1, inplace = True)
# Borrar una columna. tecnica 2
del df5['uno']


# FILTRAR
# -----------------------------------------------------------------
#imprime perimeras filas de un data frame
print df.head()
#imprime primeras 3 filas de las 2 primeras columnas
df.iloc[0:3, 0:2]
#imprime primeras 3 filas de las columnas 0,2 y 5
df.iloc[0:4, [0,2,5]]
# filtra 2 columnas
df[['age', 'male']]
#imprime primeras tres filas de las columnas age y fare
df.ix[0:2,["age","fare"]]
# filtrar por multiples condiciones
df[(df['male'] == 1) & (df['age'] < 18)]
# pasajeros por sobre la media de edad
df[(df['age'] > df['age'].mean())]


# EXPLORAR
# -----------------------------------------------------------------
# imprime los titulos de la columna o headers
print df.columns.values
# frecuencia de una variable
print(df["survived"].value_counts())
# frecuencia porcentual de una variable
print(df["survived"].value_counts(normalize = True))
# procentaje de la variable survived solo para menores de edad
print(df["survived"][df["age"] < 18].value_counts(normalize = True))
# agrupa una variable en escalas
df.groupby(pd.cut(df.age, range(0, 99, 10))).size()
# normalizar un data set comleto
df_nrm = (df - df.mean()) / (df.max() - df.min())

2 comentarios: