Ejercicio con Listas

Ejercicios con listas

Las listas constituyen uno de los tipos de datos fundamentales del lenguaje python. En este artículo se presentarán algunas de los métodos y funciones aplicables a las listas.

Estos ejercicios se realizaron con Jupyter Notebook, como convención las entradas se han colocado con color verde y las salidas en color rojo itálica, para poder diferenciarlos y mejorar la legibilidad de los ejemplos.

Crear una Lista

para crear una lista simplemente coloque una secuencia de elementos separados por comas, dentro de corchetes. Esta lista se puede asociar a una variable como en el ejemplo siguiente.

frutas=[‘mango’,’manzana’, ‘melon’,’pera’,’parchita’,’limon’]

# se creó una lista con 6 elementos

# los índices de una lista comienzan en 0

frutas

[‘mango’, ‘manzana’, ‘melon’, ‘pera’, ‘parchita’, ‘limon’]

Otra forma de crear una lista, función list

Otra forma de crear una lista es utilizando la función list([ ])

nombres= list([‘pedro’, ‘maria’,’juan’, ‘luis’, ‘lourdes’, ‘patty’, ‘mirian’])

nombres

[‘pedro’, ‘maria’, ‘juan’, ‘luis’, ‘lourdes’, ‘patty’, ‘mirian’]

Índices de las listas

Las listas comienzan desde el índice 0. para acceder a un elemento se coloca el nombre de la lista seguido de su índice entre corchetes.

frutas[0]

‘mango’

frutas[1]

‘manzana’

frutas

[‘mango’, ‘manzana’, ‘melon’, ‘pera’, ‘parchita’, ‘limon’]

nombres[0]

‘pedro’

nombres[1]

‘maria’

Slicing una lista

Se puede obtener una porción de una lista (slice) utilizando el operador dos puntos entre corchete, donde el primer elemento es el inicio del slice, el segundo elemento es el final del slice, sin incluirlo a él.

frutas[:5]

[‘mango’, ‘manzana’, ‘melon’, ‘pera’, ‘parchita’]

frutas[0:5]

[‘mango’, ‘manzana’, ‘melon’, ‘pera’, ‘parchita’]

Se observa que ambas formas son equivalentes: [:5] y [0:5] se seleccionan desde el primer elemento, índice 0 hasta el elemento con índice 4, no incluye al elemento con índice 5. Esta nomenclatura a veces es difícil de acostumbrarse, el truco es que en el rango el primer índice del elemento es incluido, pero el último índice del elemento es excluido. [1:3] incluye al elemento de índice 1 y al elemento de índice 2, no incluye al elemento de índice 3. [0:4] incluye a los elementos desde el índice 0 hasta el índice 3. No incluye al elemento de índice 4. [:4] es equivalente a la estructura anterior. [2:] incluye desde el índice 2 hasta el último elemento de la lista.

frutas[2:]

[‘melon’, ‘pera’, ‘parchita’, ‘limon’]

frutas[:4]

[‘mango’, ‘manzana’, ‘melon’, ‘pera’]

Se puede incluir un tercer elemento para indicar el espaciamiento, pasos entre elementos. frutas[0:5:2] comienza en el índice 0 y luego salta de dos en dos, 2, 4, no incluye el índice 5.

frutas[0:5:2]

[‘mango’, ‘melon’, ‘parchita’]

Se aceptan índices negativos

Se aceptan índices negativos, e indican los elementos en orden inverso, así [-1] indica el último elemento de la lista, [-2] indica el penúltimo elemento de la lista.

frutas[-1]

# Corresponde al último elemento de la lista.

‘limon’

frutas[-2:]

# corresponde a los dos elementos finales de la lista.

[‘parchita’, ‘limon’]

frutas[:-1]

# va desde el índice 0 hasta el índice final, pero sin incluirlo.

[‘mango’, ‘manzana’, ‘melon’, ‘pera’, ‘parchita’]

frutas[-1::-1]

# hemos invertido el orden de la lista, comenzando en el último elemento y con paso negativo de 1.

[‘limon’, ‘parchita’, ‘pera’, ‘melon’, ‘manzana’, ‘mango’]

Métodos que aplican a las listas

Algunos métodos que pueden aplicar a las listas se muestran a continuación:

append, clear, copy, count, extend, index, insert, pop, remove, reverse, sort.

Método append()

El método append agrega elementos al final de la lista. La sintaxis es la que se muestra a continuación:

Lista.append(‘new element’)

El nuevo elemento puede ser una cadena de caracteres (string), un número, una lista, un tuple, un diccionario.

frutas.append(‘guayaba’)

# Aquí se añadió el elemento ‘guayaba’ (una cadena de caracteres) al final de la lista.

frutas

[‘mango’, ‘manzana’, ‘melon’, ‘pera’, ‘parchita’, ‘limon’, ‘guayaba’]

frutas.append([‘cereza’,’ciruela’,’uva’])

# Aquí se añadió una lista

frutas

[‘mango’,

‘manzana’,

‘melon’,

‘pera’,

‘parchita’,

‘limon’,

‘guayaba’,

[‘cereza’, ‘ciruela’, ‘uva’]]

type(frutas)

# con la función type() se ve que el tipo de dato es una lista

list

frutas[-1]

# se observa que el último elemento que hemos añadido es una lista

[‘cereza’, ‘ciruela’, ‘uva’]

Método extend

Este método se parece al método append, pero aquí la lista se extiende elemento por elemento del objeto iterable. Con append habíamos visto que el objeto iterable se añadía como un elemento completo, no elemento por elemento. La sintaxis es:

Lista.extend(objeto iterable, /)

Lista es el nombre de la lista a la que le queremos añadir elementos. objeto iterable es un objeto que puede ser recorrido elemento por elemento.

New_f=[‘banana’,’aguacate’,’tomate’]

# Creamos una lista y la llamamos New_f (objeto iterable)

frutas.extend(New_f)

# Aquí utilizamos el método extend para extender la lista frutas elemento por elemento# con la nueva lista New_f

frutas

[‘mango’,

‘manzana’,

‘melon’,

‘pera’,

‘parchita’,

‘limon’,

‘guayaba’,

[‘cereza’, ‘ciruela’, ‘uva’],

‘banana’,

‘aguacate’,

‘tomate’]

Pasando el contenido de una lista a otra con otro nombre

Podemos crear una copia de una lista simplemente asignando la lista a otra variable, por ejemplo

New_Lista = Old_Lista

Pasa el contenido de Old_Lista a New_Lista. Ambas variables tienen el mismo contenido. y se mantienen iguales. Los cambios que se hacen en una se pasan a la otra.

hf=frutas

# se creó una variable hf y se le cargó el contenido de la lista frutas

hf

[‘mango’,

‘manzana’,

‘melon’,

‘pera’,

‘parchita’,

‘limon’,

‘guayaba’,

[‘cereza’, ‘ciruela’, ‘uva’],

‘banana’,

‘aguacate’,

‘tomate’]

frutas

[‘mango’,

‘manzana’,

‘melon’,

‘pera’,

‘parchita’,

‘limon’,

‘guayaba’,

[‘cereza’, ‘ciruela’, ‘uva’],

‘banana’,

‘aguacate’,

‘tomate’]

Se observa que ambas listas hf y frutas son iguales, tienen el mismo contenido.

hf==frutas

True

Método remove

Este método elimina la primera ocurrencia de un elemento de la lista. La sintaxis es la siguiente:

Lista.remove(value, /)

Aquí utilizamos la lista hf y eliminamos el elemento ‘manzana’ de la lista

hf.remove(‘manzana’)

hf

[‘mango’,

‘melon’,

‘pera’,

‘parchita’,

‘limon’,

‘guayaba’,

[‘cereza’, ‘ciruela’, ‘uva’],

‘banana’,

‘aguacate’,

‘tomate’]

Método pop

El método pop se utiliza para mostrar y eliminar un elemento de la lista por su índice. por defecto elimina el último elemento de la lista. pero puede indicarse el índice del elemento que desea eliminarse. La sintaxis es:

Lista.pop(self, index=-1, /)

Por ejemplo, eliminemos de la lista hf el índice 6, el cual corresponde al elemento lista [‘cereza’, ‘ciruela’, ‘uva’]

hf.pop(6)

# se muestra y se elimina el elemento de la lista hf con índice 6.

[‘cereza’, ‘ciruela’, ‘uva’]

hf

[‘mango’,

‘melon’,

‘pera’,

‘parchita’,

‘limon’,

‘guayaba’,

‘banana’,

‘aguacate’,

‘tomate’]

hf==frutas

True

frutas.insert(2,’papaya’)

frutas

[‘mango’,

‘melon’,

‘papaya’,

‘pera’,

‘parchita’,

‘limon’,

‘guayaba’,

‘banana’,

‘aguacate’,

‘tomate’]

Creando una copia independiente, no ligada

Para crear una copia no ligada a la original, como la que creamos anteriormente debe crear una nueva lista vacía, y luego con extend pasar los elementos de la lista que queremos copiar.

g_f=[]

# creamos una lista vacía.

g_f.extend(hf)

# con el método extend pasamos los elementos de la lista hf a la nueva lista g_f

g_f

[‘mango’,

‘melon’,

‘papaya’,

‘pera’,

‘parchita’,

‘limon’,

‘guayaba’,

‘banana’,

‘aguacate’,

‘tomate’]

g_f==hf

# probamos que ambas listas son iguales

True

g_f.remove(‘tomate’)

# Eliminamos un elemento de la nueva lista g_f.

g_f==hf

# Comprobamos que ya no son iguales g_f y hf, ahora funcionan independientemente.

False

Método Insert

Este método permite insertar un objeto delante del índice especificado. si se coloca índice 2, por ejemplo, el nuevo objeto ocupará el índice 2 y el elemento de la lista que ocupaba este índice ocupará el índice siguiente, 3.

Lista.insert(index, object, /)

# Trabajemos con la lista g_f que creamos. e insertemos un elemento en la posición 2, ocupada actualmente por ‘papaya’.

g_f

[‘mango’,

‘melon’,

‘papaya’,

‘pera’,

‘parchita’,

‘limon’,

‘guayaba’,

‘banana’,

‘aguacate’]

g_f.insert(2,’toronja’)

# insertamos ‘toronja’ en la posición 2. Recordar que los índices comienzan a contar desde 0.

g_f

[‘mango’,

‘melon’,

‘toronja’,

‘papaya’,

‘pera’,

‘parchita’,

‘limon’,

‘guayaba’,

‘banana’,

‘aguacate’]

Insertemos ‘mango’ en varias posiciones para utilizar luego el siguiente método count

g_f.insert(3, ‘mango’)

g_f.insert(5, ‘mango’)

g_f.insert(7, ‘mango’)

g_f

[‘mango’,

‘melon’,

‘toronja’,

‘mango’,

‘papaya’,

‘mango’,

‘pera’,

‘mango’,

‘parchita’,

‘limon’,

‘guayaba’,

‘banana’,

‘aguacate’]

Función len()

Esta función permite conocer el número de elementos que tiene una lista. Su sintaxis es:

len(Lista)

len(g_f)

13

Método Count

Este método permite contar el número de ocurrencias de un elemento dentro de la lista. su sintaxis es:

Lista.count(value, /)

g_f.count(‘mango’)

4

g_f.count(‘papaya’)

1

Hay cuatro ocurrencias de ‘mango’ y una ocurrencia de ‘papaya’

Método Sort

El método sort hace un ordenamiento de la lista «In Place», es decir hace un cambio permanente en la lista.

List.sort( /, *, key=None, reverse=False)

| Stable sort IN PLACE.

g_f.sort()

# tiene dos parámetros key= None y reverse=False que ya tienen sus valores por defecto. así que puede utilizarse con los dos paréntesis sin argumentos dentro.

g_f

[‘aguacate’,

‘banana’,

‘guayaba’,

‘limon’,

‘mango’,

‘mango’,

‘mango’,

‘mango’,

‘melon’,

‘papaya’,

‘parchita’,

‘pera’,

‘toronja’]

Método Clear

Este método elimina todos los elementos de una lista. La sintaxis es la que se muestra a continuación.

List.clear(self, /)

nombres

[‘pedro’, ‘maria’, ‘juan’, ‘luis’, ‘lourdes’, ‘patty’, ‘mirian’]

# Tenemos una lista con el nombre nombres. Vamos a eliminar los elementos de la lista.

nombres.clear()

nombres

[]

El resultado es una lista vacía.

Función del()

Esta función permite eliminar un elemento de una lista. Su sintaxis es:

del(lista[indice]

g_f

[‘aguacate’,

‘banana’,

‘guayaba’,

‘limon’,

‘mango’,

‘mango’,

‘mango’,

‘mango’,

‘melon’,

‘papaya’,

‘parchita’,

‘pera’,

‘toronja’]

del(g_f[4])

# elimina el elemento con indice 4, uno de los ‘mango’

g_f

[‘aguacate’,

‘banana’,

‘guayaba’,

‘limon’,

‘mango’,

‘mango’,

‘mango’,

‘melon’,

‘papaya’,

‘parchita’,

‘pera’,

‘toronja’]

Averiguar si un valor es parte de una lista

podemos averiguar si un valor es parte de una lista, utilizando el comando in, la sintaxis es la que se muestra a continuación.

Valor in Lista

si el valor está dentro de la lista el resultado será True, caso contrario False. Si el valor que estamos interesados en averiguar es una cadena de caracteres esta debe estar entre comillas.

‘papaya’ in g_f

True

Creando una nueva lista como subconjunto de otra lista

Utilizando slices se puede crear una nueva lista a partir de otra, por ejemplo, a partir de la lista Frutas vamos a obtener otra, la cual llamaremos frutas2, utilizando slices.

frutas

[‘mango’,

‘melon’,

‘papaya’,

‘pera’,

‘parchita’,

‘limon’,

‘guayaba’,

‘banana’,

‘aguacate’,

‘tomate’]

frutas2 = frutas[2:6]

# frutas2 va a tener 4 elementos: índices 2, 3, 4, 5 (no incluye el elemento de índice 6)

frutas2

[‘papaya’, ‘pera’, ‘parchita’, ‘limon’]

frutas2==frutas

False

Ciclos for en python

Ciclo for en python

El ciclo for ejecuta un bloque de instrucciones repetidamente hasta que la condición en la instrucción for ya no es válida, lo cual ocurre, por lo general, cuando se ha terminado de recorrer todos los elementos del objeto iterable.

Ciclo a través de un iterable

En python un objeto iterable se refiere a cualquier objeto sobre el que se pueda avanzar elemento por elemento a lo largo de él. Entre estos elementos están las listas, las cadenas de caracteres, los tuples y diccionarios.

Sintaxis del ciclo for

En la siguiente figura se muestra la sintaxis del ciclo for.

Variable es el nombre de una variable que va a servir para ir contando el número de iteraciones que se realizan en el ciclo for sobre el elemento iterable. Hay que recordar que en python el índice inicial de los objetos iterables comienza en 0, Es decir el primer elemento de un objeto iterable es 0, no 1.

En la siguiente figura se ha creado una lista y esta almacenada en una variable de nombre autos. Se muestra que el primer elemento de la lista ‘Ford’ tiene índice 0, el siguiente elemento ‘Chevrolet’ tiene índice 1, y así sucesivamente.

Objetos Iterables

En la siguiente figura se muestran algunos objetos que pueden ser utilizados como objetos iterables.

A continuación se van a mostrar ejemplos de ciclos for en cada uno de estos objetos.

Ciclo for en cadena de caracteres (string)

En la siguiente figura se muestra un código que se ha introducido en la venta del IDE de python. Se ha creado una cadena de caracteres: ‘cabeza’ y se ha almacenado en una variable de nombre cadena.

Se ha creado una variable de nombre caracter para ir recorriendo los elementos de la cadena de caracteres.

La sintaxis es

>>> for variable in String:

>>> Bloque de Instrucciones

Aquí la variable es carácter, y la cadena es ‘cabeza’ la cual esta representada por la variable de nombre cadena.

El numero de ciclos se determina por el numero de caracteres que contenga la cadena, en cada ciclo la variable caracter tomara un elemento de la cadena (un carácter).

Ciclo for en listas (list)

La sintaxis es

>>> for variable in Lista:

>>> Bloque de Instrucciones

El número de ciclos se determina por el número de elementos que tenga la lista. En cada ciclo variable será un elemento de la lista.

En el siguiente ejemplo se crea una lista y se almacena en la variable materias. En el ciclo for, x representa cada elemento de la lista. En cada ciclo la variable x toma un elemento de la lista y lo imprime. El ciclo for termina cuando se ha alcanzado el último elemento de la lista.

Ciclo for en Tuples

La sintaxis es

>>> for variable in Tuple:

>>> Bloque de Instrucciones

Un tuple es un objeto en python parecido a una lista, sin embargo, los elementos de una tupla no pueden modificarse, son inmutables y en lugar de estar entre corchetes están encerrados en paréntesis.

Por ejemplo

Charlie=(’Brown’, 8, ‘Estudiante’)

Constituye un Tuple de 3 elementos. Podemos recorrer los elementos de una tupla tal y como lo hicimos con los elementos de una lista. Notar que aquí colocamos como variable t, puede ser cualquier nombre de variable que deseemos utilizar.

Ciclo for en Diccionarios (Dictionary)

La sintaxis es

>>> for variable in Dictionary:

>>> Bloque de Instrucciones

Un diccionario es un objeto de python que está integrado por una secuencia de elementos, donde cada elemento está integrado por una clave (key) y un valor separados por dos puntos (:). Los elementos del diccionario están encerrados entre llaves ({}).

Ejemplo

Capital={’Mexico’: ‘Cidad de Mexico’, ‘Venezuela’: ‘Caracas’, ‘España’ : ‘Madrid’}

En este caso solamente se ha impreso el valor de la clave (key). Si queremos obtener tanto la clave como su valor podemos utilizar el siguiente código.

Capital={‘Mexico’: ‘Cd de Mexico’,

‘Venezuela’:’Caracas’, ‘España’:’Madrid’}

for c in Capital:

print(c,»– «, Capital[c])

Hay que notar el uso de los corchetes para indicar los valores de la capital. Capital[c].

Mexico — Cd de Mexico

Venezuela — Caracas

España — Madrid

También se puede utilizar el método ítems aplicado al diccionario y devuelve los elemento ( key y valor)

Capital={‘Mexico’: ‘Cd de Mexico’,

‘Venezuela’:’Caracas’, ‘España’:’Madrid’}

for p,c in Capital.items():

print(p,»– «, c)

Y da igual resultado que la instrucción anterior.

Mexico — Cd de Mexico

Venezuela — Caracas

España — Madrid

Ciclo for por indices

La sintaxis es

>>> for indice in objeto_iterable:

>>> Bloque de Instrucciones

En lugar de acceder al elemento accedemos a su índice. En el siguiente ejemplo creamos una lista y la almacenamos en una variable frutas. Esta lista tiene 5 elementos, desde el índice 0 hasta 4.

Cada fruta está asociada a un índice.

Frutas[0] = mango

frutas[1] = patilla

frutas[2] = cambur

frutas[3] = piña

frutas[4] = melon

Si queremos imprimir el elemento y su índice podemos utilizar el siguiente código.

for f in range(len(frutas)):

fruta=frutas[f]

print(f, fruta)

Y obtenemos lo siguiente: el índice y el elemento de la lista.

0 mango

1 patilla

2 cambur

3 piña

4 melon

Ciclo for in range()

La sintaxis es

>>> for variable in range():

>>> Bloque de Instrucciones

La función range genera una lista de números enteros y su sintaxis se muestra a continuación.

range (start, stop, [step]) genera una lista de números enteros que comienza en start y termina en stop-1. step es el paso, y por defecto es 1.

Se puede indicar solo el valor final (stop) y la lista comienza en 0 y termina en stop-1.

range(9) = 0, 1, 2, 3, 4, 5, 6, 7, 8,

Como se ve incluye el cero, pero no incluye el nueve

Range(1, 9) = 1, 2, 3, 4, 5, 6, 7, 8

Inicia en 1 y termina en 8 (9-1)

for i in range(9):

print(i)

Da como resultado la siguiente secuencia de valores.

0

1

2

3

4

5

6

7

8

Podemos utilizar un ciclo for con range para hacer una sumatoria de de una secuencia de números.

En este ejemplo vamos a realizar la suma de los 100 primeros números naturales 1 hasta el 100

n=100

suma=0

for i in range(1, n+1):

suma +=i

Print(suma)

El resultado es:

5050

Si queremos efectuar el producto de los 100 primeros números naturales.

n=100

prod=1

for i in range(1, n+1):

prod *=i

print(prod)

93326215443944152681699238856266700490715968264381621468592963895217599993229915608941463976156518286253697920827223758251185210916864000000000000000000000000

El numero es muy grande, sin embargo python lo muestra.

probemos con 10

n=10

prod=1

for i in range(1, n+1):

prod *=i

Print(prod)

El resultado es un número mas pequeño.

3628800

Hasta aquí hemos visto como utilizar ciclos for con diversos objetos iterables.

Módulos en python

Módulos en python

Si tenemos algunas funciones dentro de un archivo con extensión py, podemos utilizar estas funciones en otro archivo, para eso importamos el archivo (el archivo que estamos importando se denomina módulo).

Por ejemplo, vamos a crear un archivo llamado basicas.py en el cual vamos a crear 3 funciones, muy sencillas, solamente para ilustrar el concepto de módulo y funciones.

Si el archivo desde el cual queremos importar las funciones está dentro del mismo directorio utilizamos las siguientes instrucciones.

Estos comandos los creamos en un nuevo archivo, que en este caso hemos denominado ex-nuevo.py. Notar el uso del operador punto que separa el nombre del módulo del nombre de la función.

El resultado de correr el archivo ex_nuevo.py es el siguiente. Vemos que podemos utilizar funciones que están en otros archivos, solo tenemos que importar como módulo y utilizar las funciones dentro de ese módulo.

Utilizando parse para Cambiar de Cadena de caracteres a Fecha

Utilizando parse para Cambiar de Cadena a Fecha

En este artículo vamos a revisar algunos métodos utilizados para manejar fechas en los dataframes. Vamos a utilizar la función parse para cambiar el tipo de cadena de caracteres a fecha y vamos a utilizar el método pd.to_datetime().

Para facilitar la lectura de los códigos y sus respectivos resultados se utilizará la siguiente convención: para las líneas de comandos se utilizará el color rojo y para las salidas el color verde en italica.

Importando parse desde el módulo dateutil.parser

Lo primero que debemos hacer es importar las librerías y funciones que vamos a utilizar durante la sesión. En este caso como vamos a trabajar con dataframes debemos importar el modulo de pandas y también vamos a importar la función parse de la librería dateutil.parser

Import pandas as pd

from dateutil.parser import parse

Creando una variable para almacenar fecha como cadena (string)

Creamos una variable de nombre str_date y le asignamos una cadena de caracteres que representa una fecha.

str_date=’2018-05-01′

Pasando de Cadena a Fecha (string to date using parse)

Luego creamos una variable date_1 para almacenar el valor de aplicar la función parse a la variable str_date.

date_1 = parse(str_date)

Mostramos el valor de la variable date_1

date_1

datetime.datetime(2018, 5, 1, 0, 0)

También podemos mandar a imprimir el valor de la variable date_1 y el tipo de dato (dtype).

print(‘date_1: ‘, date_1, type(date_1))

date_1: 2018-05-01 00:00:00

Fecha a Cadena (From Date to String Using strftime)

Creamos una variable llamada date_2 que va a recibir el valor de la fecha como string. Aquí aplicamos el método strftime(‘codigos de formato de tiempo’). El método strftime acepta una serie de códigos de formato de tiempo dentro de comillas simples.

date_2 = date_1.strftime(‘%Y-%m-%d’)

print(‘date_2 : ‘, date_2, type(date_2))

date_2 : 2018-05-01 <class ‘str’>

De Unix/Epoch a un formato leible de fecha

(From Unix/Epoch time to readable date format)

En el siguiente ejemplo se utiliza un diccionario de Python (dict) para crear un dataframe, el cual tiene una columna de fechas (date).

datx={‘date’:[‘2018-08-09 11:10:55’, ‘2019-01-02 13:15:21’]}

Se utiliza el método pd.DataFrame para crear un dataframe a partir del dict que esta en la variable datx. Creamos la variable datxx para almacenar el dataframe.

datxx=pd.DataFrame(datx)

mostramos el dataframe

datxx

date
0 2018-08-09 11:10:55
1 2019-01-02 13:15:21

Preguntamos que tipo de datos constituyen el dataframe. En este caso hay una sola columna, date, la cual es de tipo objeto (cadena de caracteres).

datxx.dtypes

date object

dtype: object

Para transformar la columna de fechas, date, que esta en formato de cadena de caracteres a un formato de fecha se utiliza el método pd.datetime() como se muestra en la siguiente línea. Notar el formato que se utiliza para escribir la columna. Se coloca primero el nombre del dataframe, en este caso datxx, seguido por el nombre de la columna, entre comillas y entre corchetes. Otra forma de definir una columna del dataframe es utilizando el operador punto. Se coloca primero el nombre del dataframe, datxx, seguido de un punto y luego el nombre de la columna.

datxx[‘date’]=pd.to_datetime(datxx[‘date’], unit=’s’)

datxx

date
0 2018-08-09 11:10:55
1 2019-01-02 13:15:21

Si preguntamos por el tipo de datos vemos que ahora la fecha muestra un tipo datetime64[ns].

datxx.dtypes

date datetime64[ns]

dtype: object

Utilizando fecha como un numero de segundos a partir de la fecha de origen (origin: Unix/Epoch 1970-01-01)

Podemos crear un dataframe utilizando el número de segundos transcurridos desde el origen. Por defecto el origen está establecido como el 01 de enero de 1970 (1970-01-01, Unix/Epoch).

df=pd.DataFrame({‘date’: [1349720105,1349806505]})

df

date
0 1349720105
1 1349806505

Para transformar los valores numéricos en formato de fecha utilizamos pd.to_datetime() y colocamos el parámetro unit con el argumento ‘s’ para denotar que el numero que queremos transformar a fecha corresponde con el numero de segundos transcurridos desde el origen.

df[‘date’] = pd.to_datetime(df[‘date’], unit=’s’)

df

date
0 2012-10-08 18:15:05
1 2012-10-09 18:15:05

Vemos como hemos pasado de segundos transcurridos desde el origen.

Añadir y Restar Fechas (Add and Substract Dates) – Uso de timedelta

Se pueden añadir o restar intervalos de tiempo utilizando un objeto del tipo timedelta. Para eso debe importarse de la librería datetime.

from datetime import datetime, timedelta

Podemos obtener una fecha al restar un delta de tiempo, utilizando timedelta. En este caso utilizamos el parámetro days con el argumento 3. Lo que quiere decir que estamos restando 3 días de la fecha indicada.

Tenemos que transformar la cadena de caracteres que representa la fecha en un formato de fecha utilizando parse.

parse(‘2019-04-07’)-timedelta(days=3)

datetime.datetime(2019, 4, 4, 0, 0)

Para obtener la fecha como una cadena de caracteres

d=(parse(‘2019-04-07’)-timedelta(days=3))

d.strftime(‘%Y-%m-%d’)

‘2019-04-04’

En este ejemplo vamos a crear un dataframe con dos columnas de fechas y una tercera columna indicando la diferencia entre esas dos fechas.

Creamos una variable Time_inicio y le asignamos una cadena de caracteres, esta fecha es la fecha inicial.

Time_inicio=’2019-12-25 00:00′

Luego creamos una variable fin_mes y la asociamos a un diccionario.

fin_mes={‘fin_mes’: [‘2020-01-31’, ‘2020-02-29’, ‘2020-03-31’, ‘2020-04-30’]}

Creamos una variable dtest y le asignamos un dataframe el cual obtenemos al Transformar el diccionario en un dataframe con pd.DataFrame.

dtest=pd.DataFrame(fin_mes)

dtest

fin_mes
0 2020-01-31
1 2020-02-29
2 2020-03-31
3 2020-04-30

Creamos una nueva columna en el dataframe ‘T_Inic’ y le asignamos el valor de la variable Time_inic.

dtest[‘T_inic’]=Time_inicio

dtest

fin_mes T_inic
0 2020-01-31 2019-12-25 00:00
1 2020-02-29 2019-12-25 00:00
2 2020-03-31 2019-12-25 00:00
3 2020-04-30 2019-12-25 00:00

Notar que la asignación del valor de la variable Time_inic se le ha hecho a todos los elementos de la columna ‘T-inic’.

Para poder efectuar operaciones con las fechas tenemos que pasar del formato de cadena de caracteres (string) a formato de fecha, para lo cual utilizamos el método pd.to_datetime().

dtest[‘fin_mes’]=pd.to_datetime(dtest[‘fin_mes’])

dtest[‘T_inic’]=pd.to_datetime(dtest[‘T_inic’])

dtest

fin_mes T_inic
0 2020-01-31 2019-12-25
1 2020-02-29 2019-12-25
2 2020-03-31 2019-12-25
3 2020-04-30 2019-12-25

dtest[‘T_inic’]

0 2019-12-25

1 2019-12-25

2 2019-12-25

3 2019-12-25

Name: T_inic, dtype: datetime64[ns]

dtest[‘T_inic’].dtype

dtype(‘<M8[ns]’)

Luego de transformar a formato de fecha, podemos crear una columna para almacenar la diferencia entre las columnas de ‘fin_mes’ y ‘T_inic’.

dtest[‘delta’]=dtest[‘fin_mes’]-dtest[‘T_inic’]

dtest

fin_mes T_inic delta
0 2020-01-31 2019-12-25 37 days
1 2020-02-29 2019-12-25 66 days
2 2020-03-31 2019-12-25 97 days
3 2020-04-30 2019-12-25 127 days

El resultado final es una tabla (dataframe) que tiene tres columnas, dos columnas de fecha y una columna de delta tiempo (timedelta).

Creando un DataFrame con pd.DataFrame en pandas

Para crear un DataFrame en pandas se puede utilizar la siguiente función.

class pandas.DataFrame(data=None, index: Optional[Collection] = None, columns: Optional[Collection] = None, dtype: Union[str, numpy.dtype, ExtensionDtype, None] = None, copy: bool = False)

Los parámetros que utiliza esta función están resaltados en rojo, son 5 parámetros y todos tienen valores por defecto.

Parámetros

data ndarray (estructurado o homogéneo), Iterable, dict, o DataFrame

Dict puede contener Series, arrays, constantes, u objetos similares a listas.

index índice o de forma de arreglo

Índice a utilizar para el data frame (tabla) resultante. Tomará por defecto los valores de RangeIndex si no se suministra información sobre el indexado.

columns índice o de forma de arreglo

Se indican las etiquetas de las columnas para utilizar en el data frame (tabla) resultante. Tomará los valores del RangeIndex (0, 1, 2, …, n) por defecto, si no se suministran etiquetas para las columnas.

dtype dtype, por defecto None

Para establecer un Data type. Un solo dtype es permitido. Si None, se infieren los dtype.

copy bool, por defecto False

Copiar datos de las entradas. Solo afecta DataFrame / 2d ndarray.

En el siguiente ejemplo se va a construir un dataframe a partir de un Diccionario (Dict). Este tipo de estructura de datos tiene la siguiente forma.

En el siguiente ejemplo vamos a crear un dictionary donde la clave (key) es el nombre de la columna y el valor es una lista de números que integran la columna.

d={‘col1’: [1,2,3], ‘col2’: [4,5,6], ‘col3’:[7,8,9]}

a la variable df se le va a asignar un objeto del tipo dataframe creado con la función. Aquí solo estamos utilizando el primer parámetro data, los demás se asignan con sus valores por defecto.

df=pd.DataFrame(data=d)

Si queremos ver los atributos del data frame podemos utilizar los atributos para tal fin como df.shape para ver las longitudes de la tabla, el primer número es el de las filas y el segundo es el de las columnas.

In[61]:

df.shape

Out[61]:

(3, 3)

Esto indica que el dataframe df tiene 3 filas y 3 columnas.

Si queremos ver el contenido del dataframe simplemente colocamos el nombre del dataframe y ejecutamos. (aquí se utilizó jupiter notebooks y para ejecutar se utiliza la combinación de teclas [Mayúscula] +[Enter]).

In[48]:

df

Aparece el siguiente resultado, notar que cada elemento del dictionary se va añadiendo a lo largo de las columnas.

Out[48]:

|      |col1 |col2 |col3

|0   |1       |4       |7

|1   |2       |5       |8

|2   |3      |6      |9

Si queremos obtener una descripción de las estadísticas básicas de las columnas con datos numéricos podemos utilizar la función df.describe()

df.describe()

Out[50]:

|             |col1   |col2   |col3

|count |3.0    |3.0      |3.0

|mean |2.0   |5.0      |8.0

|std      |1.0    |1.0      |1.0

|min   |1.0     |4.0     |7.0

|25% |1.5     |4.5      |7.5

|50% |2.0   |5.0      |8.0

|75% |2.5    |5.5     |8.5

|max |3.0    |6.0     |9.0

También Podemos obtener el tipo de datos que están en las columnas con el atributo df.dtypes.

In[52]:

df.dtypes

Out[52]:

col1 int64

col2 int64

col3 int64

dtype: object—-

Aquí vemos que el tipo de dato en las columnas es del tipo int64.

Podemos ver el tipo de objeto, y utilizamos la función type(df)

In[53]:

type(df)

Out[53]:

pandas.core.frame.DataFrame

El tipo es un objeto DataFrame.

Podemos crear una columna nueva como el resultado de una operación entre columnas. En el ejemplo se ha creado la columna con etiqueta ‘col4’ como la suma de las columnas con etiquetas ‘col1’ y ‘col2’.

In[54]:

df[‘col4’]=df[‘col1’]+df[‘col2’]

In[55]:

df

Out[55]:

|      |col1 |col2 |col3 |col4

|0   |1        |4      |7       |5

|1    |2       |5      |8       |7

|2   |3       |6       |9      |9

aquí preguntamos por la forma del nuevo dataframe y vemos que ahora tiene 3 filas y 4 columnas.

In[56]:

df.shape

Out[56]:

(3, 4)

Podemos asignar un valor (escalar) a todas las filas de una columna. Por ejemplo hemos creado una nueva columna, ‘col5’ y le hemos asignado el valor de 1000

In[57]:

df[‘col5’]=1000

In[58]:

df

Out[58]:

|       |col1     |col2    |col3    |col4   |col5

|0    |1            |4           |7         |5         |1000

|1     |2           |5           |8          |7       |1000

|2    |3          |6            |9          |9       |1000

Ahora el dataframe tiene 3 filas y 5 columnas.

In[59]:

df.shape

Out[59]:

(3, 5)