El uso de NumPy.

laravel

NumPy, es  una de las librerías  de Python  mas conocida, debido  a la fortaleza que da al lenguaje en el procesamiento de matrices y arrays de diferente complejidad.

Su uso, es ampliamente reconocido como procesador de cálculos científicos, (que entre otras muchas opciones permite procesar matrices multidimensionales, ejecutar funciones de transmisión o de Algebra Lineal, integrar scripts de otros lenguajes  como C y Fortran y  trabajar con números aleatorios ), también es utilizado a menudo para almacenar datos genéricos, con la propiedad de que podemos definir tipos de datos arbitrarios, que pueden integrarse  con múltiples tipos de bases de datos.  

Recordando que en Python todo es un objeto, diremos que NumPy establece entonces un arreglo multidimensional y otras matrices derivadas, que no son más que otros  objetos.

 Lo que hace Numpy,  es dotarnos una herramienta que nos permite realizar operaciones en un arreglo de cualquier dimensión.

Python ofrece otras opciones para procesar  datos,  como  son sus listas, la diferencia es que Numpy permite realizar operaciones estadísticas y de álgebra, crear  funciones de entrada y salida de datos, ordenar los integrantes de un arreglo y ejecutar operaciones lógicas, extendiendo la capacidad de Python para procesar matrices e información científica

A continuación mostrar algunos de los comandos más usados de esta extensión:

 Para instalar NumPy, en  Windows necesitas Python y Pip en tu sistema.

pip install numpy

#Luego importar la librería con Import

import numpy

Array()

Una lista de python no es un arreglo, sino elementos que se encuentran encerrados entre encerrados entre corchetes, para convertirlos en un array de Numpy, basta con aplicar la siguiente sintaxis:

elementoLista = numpy.array

 import numpy
 l = [1, 2, 3, 4, 5]
 nuevo = numpy.array(l)
 print("la lista convertida a array es = ", nuevo) 

y obtenemos el nuevo array:

>>la lista convertida a array
es =  [1 2 3 4 5]

Del mismo modo haríamos si en vez de ser una lista es una tupla. Sabemos que la tupla contiene una serie de elementos encerrados entre paréntesis, entonces será:

 import numpy
 tupla = (1, 2, 3, 4, 5)
 nuevoarray = numpy.array(tupla)
 print("El nuevo array a partir de la tupla es  = ", nuevoarray) 

La salida será:

>>El nuevo array a partir de
la tupla es  =  [1 2 3 4 5]

Append()

numpy.append(array, value, axis)

append() añade los elementos al final del arreglo, ya sean columnas o valores independientes, por lo que se obtiene entonces un nuevo array actualizado.

Si no definimos el valor de axis(es opcional y asimila valores enteros),  la nueva matriz obtenida se aplanará.

Para añadir una columna lo haríamos de este modo: Considere el siguiente ejemplo donde creamos un arreglo bidimensional e insertamos dos columnas:

 import numpy
 uno = numpy.array([[0, 1, 2, 3,], [4, 5, 6, 8,]])
 dos = numpy.array([[7], [9]])
 nuevo = numpy.append(uno, dos, axis = 1)
 print(nuevo) 

eso nos dará como resultado:

 [[0,1,2,3,7],
 [4,5,6,8,9]] 

Si no usaramos un valor para axis

newArray = numpy.append(a, b)

El resultado seria

 [0, 1,2, 3, 4, 5, 6, 8, 7, 9]

Añadir una fila

 import numpy
 a1 = numpy.array([[0, 1, 2, 3], [4, 5, 6, 7]])
 nuevo = numpy.append(a1, [[8, 9, 10, 11, 12]], axis = 0)
 print(nuevo)
 [[0, 1, 2, 3]
 [, 5, 6, 7]
 [8, 9, 10, 11, 12]] 

Añadir un arreglo a otro

 import numpy
 x = numpy.array([8, 12, 16, 20, 24])
 y = numpy.array([28, 32, 36, 40, 44])
 nuevo = numpy.append(x, y)
 print("Nuevo array resultante = ", nuevo) 

el resultado es:

Nuevo array resultante =  [ 8 12 16 20 24 28 32 36 40 44]

Insert()

La diferencia con append(), es que insert(), permite decidir donde exactamente queremos agregar el elemento,  seleccionando el índice que deseamos.

 import numpy
 ar = numpy.array([0, 1, 2,3])#declaramos el array tipo numpy
 nuevo = numpy.insert(a, 2, 55)#insertamos en el índice 2 el valor 55
 print(nuevo) 

La salida será la siguiente:

[0, 1, 55, 2, 3]

delete()

Se utiliza para  eliminar un elemento de un arreglo NumPy  

 import numpy
 restar = numpy.array([1, 2, 3, 4, 5])
 nuevo = numpy.delete(restar, 2, axis = 0)
 print(nuevo) 

Obtendremos:

[1 2 4 5]

Eliminar una fila

import numpy
valores = numpy.array([[1, 2, 3, 4, 5], [6, 7, 8, 9,10], [11, 12, 25, 22]])
nuevo = numpy.delete(valores, 1, axis = 0)
print(nuevo) 

 esto nos dara como resultado:

[list([1, 2, 3, 4, 5]) list([11, 12, 25, 22])]

Size

El método size tiene diferentes usos, como obtener el número de elementos  en un array o calcular la longitud de este:

Calcular el número de elementos en un array

 import numpy
 ar = numpy.array([1000, 2000, 3000, 6000])
 if(ar.size != 0):
     print("la matriz no esta vacia")
 else:
     print("ar contiene = ", ar) 

La salida es la siguiente:

>>la matriz no esta vacia

 Si moficaramos  el código y colocaramos

 import numpy
 ar = numpy.array([1000, 2000, 3000, 6000])
 if(ar.size == 0):
     print("la matriz no esta vacia")
 else:
     print("ar contiene = ", ar) 

Obtendriamos

>>ar contiene =  [1000 2000 3000 6000]

where()

Nos devuelve el índice de un valor

 import numpy
 lista = numpy.array(['a', 2, 'b', 4, 'c'])
 print("c is found at index: ", index[0]) 

El resultado será:

>>c is found at index:  (array([4]),)

Si cambiamos la última línea de nuestro código

 import numpy
 lista = numpy.array(['a', 2, 'b', 4, 'c'])
 print("c is found at index: ", numpy.where(lista == '5')) 

Obtendremos también el tipo de dato

>>c is found at index:  (array([], dtype=int64),)

Obtener la longitud de un array

 import numpy
 cuerpo = numpy.array([1, 2, 3, 4, 5, 6])
 print("El tamaño del cuerpo  = ", cuerpo.size) 

 el resultado será:

>>El tamaño del cuerpo  =  6

Dividir un arreglo

Para dividir un arreglo utilizaremos dos puntos (:) y la sintaxis es la siguiente :

array[from:to]

 Funciona de este modo:

 import numpy
 parte = numpy.array([1, 2, 3, 4, 5, 6, 7, 8])
 print("Un pedazo del array parte es = ", parte[2:5]) 

Obtendremos:

>>un pedazo del array parte es
=  [3 4 5]

Lo que hemos hecho ha sido extraer del arreglo parte una sección del mismo que va del índice 2 al 5.

 Extraer los dos últimos elementos

 import numpy
 two_last= numpy.array([0, 1, 2, 3, 4, 5, 6, 7, 8])
 print("A subset of array a = ", two_last[-2:]) 

Resultado:

>>A subset of array a =  [7 8]

addition()  

Numpy, también permite aplicar funciones a los miembros de un arreglo o matriz multidimensional, mediante el uso de addition()

 import numpy
 addition = lambda x: (x + x*2)
 conjunto = numpy.array([1, 2, 3, 4, 5, 6])
 print("Resultado: ", addition(conjunto)) 

La salida es:

Resultado:  [ 3 6  9 12 15 18]

tolist

El método tolist, nos permitirá convertir un arreglo en una lista.

 import numpy
 x = numpy.array([10, 20, 30, 40, 50, 60, 70, 80, 90])
 print("Convirtiendo un array en lista = ", x.tolist()) 

obtenemos entonces:

>>Convirtiendo un array en lista =  [10, 20, 30, 40, 50, 60, 70, 80,90]

savetxt()

Con savetxt(), podemos exportar un arreglo a formato de texto o csv: 

 import numpy
 a = numpy.array([16, 32, 48, 60])
 numpy.savetxt("mi.csv", a) 

Este código generará un archivo CSV en la ubicación donde se almacena nuestro archivo de código Python.

Puedes eliminar el relleno de ceros adicional de esta manera:

numpy.savetxt("miArray.csv", a,fmt='%.2f')

sort()

 Podemos  ordenar el arreglo NumPy usando el método sort (), que toma como eje  por defecto(-1), que indicará la forma en que queremos ordenar el arreglo, siendo  -1 el ultimo eje.

 import numpy
 x = numpy.array([56, 45, 17, 89, 3, 12, 5])
 print("array ordenado = ", numpy.sort(x)) 

el resultado:

>> array ordenado =  [ 3  5 12 17 45 56 89]

Normalizar un arreglo

Normalizar un arreglo, consiste en colocar los valores de un arreglo dentro de un  rango definido, siguiendo la sintaxís:

x = (x – xmin) / (xmax – xmin)

Con  los métodos max () y min () podemos organizar el array colocando los valores limites que esperamos:

 import numpy
 x= numpy.array([5000, 4800, 160, 80, 1200, 3000, 500])
 xmax = x.max()
 xmin = x.min()
 x = (x - xmin)/(xmax - xmin)
 print("array nomalizado x = \n", x)
 print(xmax )
 print(xmin ) 

 asi obtendremos:

 array nomalizado x =
 [1.  0.95934959 0.01626016 0.  0.22764228 0.59349593  0.08536585]
 5000
 80 

Indexar un arreglo

 import numpy
 x = numpy.array([40, 73, 77, 89])
 print("elemento en el indice 3 = ", x[3]) 

el resultado es:

>>elemento en el indice 3 =  89

Otro ejemplo, de su uso en un array multidimensional

 import numpy
 b = numpy.array([[10, 45, 36], [78, 9, 18]])
 print("elemento en el indice b[0][1] = ", b[0][1]) 

La salida será:

>>elemento en el indice
b[0][1] =  45

Y listo, esto es todo.

Espero modestamente que este artículo, sirva de ayuda a alguien.

Gracias.

Desarrollar funciones en Python

logo python

Desarrollar funciones en Python pueden ser necesario para hallar solucion a problemas que otras funciones existentes no nos resuelven.

La librería del lenguaje no deja de crecer, pero es común que si actuamos como investigadores, en mas de una ocasion, no encontremos lo que necesitamos para obtener la respuesta que buscamos.

Funciones

En Python como en muchos otros lenguajes existen funciones y métodos.

Veamos a  una función como trozo de código que controla   o ejecuta un conjunto de instrucciones, y a la que podemos necesitar utilizar varias veces, esperando siempre el mismo comportamiento.

Los tipos de funciones en Python son tres:

Las que son predefinidas como print() o help().

Las que son definidas por el usuario, ya que este las crea

Las funciones anónimas, o  funciones lambda, llamadas  asi porque no se declaran bajo el standard def, que es el que usa python en el resto de los casos.

Docstring

Antes de ir más allá, algo básico a la hora de escribir código  en Python como en todo lenguaje de programación, son los comentarios, o la documentación que explique lo que estamos creando.

Añadir docstrings a la función, permite conocer su comportamiento esperado, ya que mediante su descripción documentamos todo aquello que consideramos importante, para entender que hace.

Los docstring se colocan justo después de la primera línea de la función, y se inicializan con tres comillas dobles,  y se finaliza de igual modo.

def  nada():
"""
   esta función no hara nada
   retornara un campo de tipo none
"""
   return 

Métodos

Los métodos son pequeñas funciones, que forman parte de una clase, por tanto se accede a ellos instanciando esta o con un objeto, a diferencia de una función típica que puede ser llamada sin esa restricción.

 Puede parecer confuso, pero la mejor forma de verlo es pensando que: todos los métodos son funciones pero no todas las funciones son métodos.

Por ejemplo una función puede ser:

def función_x(a,b,c):
   return a*b+c

Habiendo definido la función y lo que esperamos de ella, para llamarla solo debemos  asignar valores a sus parámetros

función_x(2,3,5)

Comparemos como seria al crear una clase:

class Resultado(object):  
   def solucion(self, a,b,c):  
   self.contents = a*b+c 
   return self.contents

Si ahora deseamos llamar  al método solución(), al pertenecer a la clase Resultado, necesitamos primero crear un objeto o instanciar la clase.

solucionInstance = resultado() 
solucionInstance.solucion(1,2,4)

Un elemento que puede llamar a confusión cuando empiezas en Python es la diferencia entre parámetros y argumentos.

Entenderlo es más sencillo de lo que parece:

Imagina que creas una función que suma dos variables, la variable A y la B

def letras(A, B) 
   return A+B

A y B son parámetros, sin embargo cuando debes llamar la función o el  método para ejecutarlo necesitas dar valor a  los parámetros cuando los llamas

Si  A = 1, B=5

def letras(1, 5)

La  función hará lo que está establecido en su comportamiento sumar 1+5

Cuando creamos la clase Resultado al método solución se le pasaron tres parámetros, sin embargo al crear el objeto se pasaron cuatro argumentos, pues se añadió self.

self , es siempre el primer argumento de cualquier clase y hace referencia a ella misma.

Cuando una función es creada por un usuario, se declara siempre igual:

  • La palabra def y luego el nombre de la función,  después se añaden los parámetros de la función entre paréntesis y después  dos puntos,  para terminar la línea.
  • La acción que la funcion debe ejecutar..
  • Y la llamada a return para que nos devuelva algo. No colocar return provocará que la función devuelva un objeto none, el cual no admite que se ejecuten funciones sobre el.
def función(a, b): 
   c=a+b 
   return c

Existen diferentes tipos de argumentos

Los que son por defecto, los requeridos, los argumentos keyword y los  variables.

Argumentos por defecto

Son que les asigna un valor mediante el operador =

def menos(a,b,d=3): 
   return a-b-d

Esta función puede ser llamada con todos sus parámetros,  o solo con alguno de ellos.

#llamandola con 1 parametro  
menos(b=2)
#llamandola con todos los parametros 
menos( a=10,b=12,d=4)

Argumentos requeridos

Son aquellos que tiene que ser pasados a la función en el momento adecuado y en un orden dado para garantizar su ejecución

En la función menos() a, b y d son argumentos requeridos, los cuales deben pasarse en un momento dado (al inicio) y en un orden ( ya que a-b-d), cambiar ese orden alteraría el resultado.

Argumentos keyword

Este tipo de argumentos son llamados utilizando el parametro al que corresponde para identificarlo

def sol(a,b): 
   return a+b 
   
#llamando la función con el uso de keywords 
def sol(a=2, b=3)

 Cuando usamos las keywords, podemos cambiar el orden de los argumentos, sin que ello afecte el resultado

def sol(b=3,a=2)

Argumentos de número  variable

Se utiliza cuando no se sabe el numero de argumentos esperado, y para ello se utiliza la sintaxis *args

def  varios(*args):   
   return sum(args)  
   #ejecutando la función 
   varios(3,6,7)

El asterisco * , se coloca antes del nombre de la variable que soporta los argumentos multiples:

def  diferentes(*varnueva):  
   x=2  
   for i in varnueva:  
   x += i*2  
   return x

Variables

Las  variables en Python pueden ser locales o globales, las primeras son las que se definen dentro de las funciones, por tanto solo se puede acceder a ellas desde dentro de la función, mientras que las variables globales puede obtenerla cualquier función.

Return

Return es el encargado de  devolver el resultado, ya sea uno o múltiples valores, y su uso nos permite , ampliar las posibilidades  de nuestra función o método.

Cuando necesitamos que el return nos devuelva multiples valores, utilizaremos tuplas

Desarrollar funciones en Python

Funciones anónimas

Son las funciones que en vez de declararse con def, son declaradas con la palabra lambda.

double = lambda x: x*3  
   double(5)

En este caso x es el argumento, y x*3 la instrucción que la función debe cumplir

Una función con dos argumentos podría ser

sum = lambda xmy:x+y  
   sum(4,2)

Las funciones anónimas pueden usarse por ejemplo, cuando se requieren funciones con un corto periodo de tiempo de vida, por ejemplo cuando se trabaja con maps(), filter() o reduce().

Main

La función main(), se usa comunenente en Python para agrupar los principales componentes de un sistema.

En un ejemplo sencillo podría ser algo asi:

def  main():  
   varios()  
   solucion() 
   main()

Existe un detalle a considerar, para llamar main() como clase, debe hacerse de esta forma:

__name__ ==’__main__’:

De lo contrario Python asumirá que estamos llamando a un modulo

main() también puede crearse utilizando __init__ para instanciar una clase o un objeto. El nuevo objeto instanciado es asignado al parámetro self

La estructura es esta:

class  nueva:  
""" Requires:  
   atrib_a 
   atrib_b 
"""
def  __init__ (self, atrib_a, atrib_b): 
   self.atrib_a =atrib_a 

 self.atrib_b = atrib_b 
 def  funcion1(self): 
 funcion1  = …acción…. 
 return funcion1 
 #llamando a main 
 if __name__ ==  ”__main__”: 
  solucion =  solucion(argumento1, argumento2) 
  funcion1  = solucion.funcion1() 
  print(funcion1) 

Y listo, esto es todo.

Espero modestamente que este artículo, sirva de ayuda a alguien.

Gracias.

 ….un sueño es casi todo  y más que  nada, más que todo al soñarlo, casi nada después……

Formatos de compresión en Python

logo python

En su mayoría, los lenguajes poseen métodos para compactar archivos. Veamos en este post, formatos de compresión en Python.

zlib y gzip pertenecen a la librería zip de GNU, por su lado  bz2  es compatible con el proporciona acceso al formato zip2 más moderno.

 En ambos casos, estos métodos de compactación de datos en Python, aceptan cualquier  formato de entrada, y al mismo ofrecen  interfaces para leer y escribir archivos comprimidos de forma transparente.

tarfile lee y escribe el formato de archivo Unix.

zipfile funciona con archivos basados en el formato popularizado por el programa de PC PKZIP

Estos módulos, permiten  combinar varios archivos, en un sólo que puede ser manejado como una unidad. 

….. es el tiempo más lento del mundo, cuando va de prisa

R.Arjona

TypeError: ‘int’ object is not iterable. Python

python error

El error TypeError: ‘int’ object is not iterable, puede ser lanzado en Python, cuando intentamos iterar dentro de un vector, pero no indicamos un rango de recorrido.

Revisa si tienes algo como esto:

for i in len(vector)

Intenta cambiarlo por esto.

for I in range(len(vector))

Puedes ver aquí la causa del error index out of range

Espero modestamente que este artículo, sirva de ayuda a alguien.

Gracias

«…..lo que realmente importa no es lo que te da la vida, sino lo que haces con ello….»

Diferencias entre flatten() y ravel() en Python

logo python

Muchas veces las usamos indistintamente pero existen diferencias entre flatten() y ravel(), en Python

Cuando necesitamos convertir un ndarray en un array de una sola dimensión, podemos valernos de algunas de estas dos funciones de numpy, la biblioteca para operar funciones numéricas que Python posee.

flatten() vs ravel()

Las diferencias entre ambas funciones no son muchas, pero existen. Veamos

flatten()

Solo nos retornará una copia del array original, por lo que si modificamos su composición en el transcurso de nuestro código, nos seguirá devolviendo el array inicial

Por otro lado en comparación con ravel(), es más lento y ocupa mayor cantidad de memoria.

flatten() además, es un método propio del objeto ndarray

ravel()

Su resultado es una vista o referencia del array que esta aplanando o convirtiendo, pero si este cambia, al ser una referencia, el también se ve afectado y actualiza su contenido.

Es mucho más rápido y no ocupa memoria.

ravel() actúa como una función, pero esta diseñado como una librería

Espero modestamente que este artículo, sirva de ayuda a alguien.

Gracias


“Todo como el diamante, antes que luz es carbon”

JMarti

El método pop() en Python.

logo python

El método pop() elimina y retorna un elemento de una lista.
Puede emplear un parámetro opcional,  que el índice del elemento que desea eliminar de la lista.

Si no se especifica ningún índice, pop() elimina y retorna el último elemento de la lista.
Si el índice especificado en el método pop() no está en el rango de la lista, lanzara el error- IndexError: pop index out of range exception. 

lista = [1,2,3,4,56,'a','er','soso',False,True]
lista.pop()
output
True

Espero modestamente que este artículo, sirva de ayuda a alguien.

Gracias

No podía despreciarlo, era el ultimo brindis de un bohemio por una reina

Diferencia entre json.load() y json.loads()

logo python

La diferencia entre json.load() y json.loads(), puede a menudo confundirnos cuando operamos con archivos json desde Python.

He aquí en que se diferencian:

json.load(): deserializa el archivo json, tomando como cadena (string), su contenido y soporta texto y binario, para convertirlo en un objeto Python, siguiendo esta tabla de conversión

JSONPython
objectdict
arraylist
stringstr
number (int)int
number (real)float
trueTrue
falseFalse
nullNone
tabla de conversion de datos json python

json.load()

deserializa el archivo en si mismo, ya que acepta el objeto file(archivo), por tanto acepta esta forma

with open("/abc/data.json", "r") as content:
print(json.load(content))

Esto no podríamos hacerlo con json.loads(), porque lanzaría un error del tipo:

TypeError: expected string or buffer

json.loads()

Deserializa un string, por tanto al usarlo deberíamos pasarle  el contenido del archivo empleando, por ejemplo read().

with open("json_data.json", "r") as content:
print(json.loads(content.read()))

Esto se debe, a que al emplear la función read(), estamos leyendo el contenido de la cadena o string,  y no el archivo como objeto.

Si intentaramos emplear json.load(), para deserializar solo el contenido obtendríamos este error:

with open("json_data.json", "r") as content:
print(json.load(content.read()))
AttributeError: 'str' object has no attribute 'read'

En este link dejo especificaciones sobre su sintaxis

Dicho de otro modo json.load() deserializa archivos y json.loads() deserializa strings.

Espero modestamente que este artículo, sirva de ayuda a alguien.

Gracias

…. hay que levantarse cada mañana con una esperanza y dormirse cada noche con una meta….

linspace logspace y ravel en python

logo python

Dentro de la librería Numpy, existen múltiples métodos para crear arrays. Tres  de ellas, que habrán visto en algún momento, son linspace logspace y ravel.

En este post explicaré rápidamente su empleo.

linspace()

Su sintaxis es :

numpy.linspace(valor-inicial, valor-final, número de valores, valor-final-a-incluir, tipo de valor)

Crea un array, que estará formado por una cantidad de valores dada y que quedará equiespaciada dentro de los limites dados, o sea el valor inicial y el valor final.

Los tres parámetros primeros son obligatorios, los dos restantes opcionales.

El valor final por defecto, queda incluido en el array, pero puede ser configurado, para lo contrario, en el parámetro valor final a incluir, que asimila valores True o False

a = np.linspace(1, 4, 4)
a
array([1., 2., 3., 4.])

linspace()

Asimila especificaciones, como el tipo de dato en su ultimo parámetro, que añade dtype():

a = np.linspace(1, 4, 4 dtype = "int")
a
array([1, 2, 3, 4])
print(a.dtype)
print(a.shape)
int32 (4,)

logspace()

Funciona de forma muy parecida a linspace(), pero la escala de valores del array es logaritmica:

b = np.logspace(2, 3, 10)
b
La función numpy.logspace

Como ultimo elemento, decir que logspace() aplica por defecto base 10 en el algoritmo pero puede ser modificado.

ravel()

devuelve una matriz ( de una sola dimensión) contigua aplanada, que posee todos los elementos del mismo tipo que esta.

Su sintaxis es

numpy.ravel(array, order = 'C')
array : [array_like]array de entrada
order : [C-contiguous, F-contiguous, A-contiguous; optional]         

C-contiguous. Es el  orden contiguo en memoria (el ultimo índice, en este caso, varia mas rapido)

El orden C significa que operar el aumento de fila en la matriz será un poco más rápido

El orden F (FORTRAN) indica que en la memoria (el primer índice varía más rápido). Significa que las operaciones en columnas serán más rápidas.

Diferencias entre. flatten y ravel

«A» significa leer / escribir los elementos en un orden de índice similar a Fortran,  si la matriz es Fortran contigua en la memoria, de lo contrario será orden C.

Espero modestamente que este artículo, sirva de ayuda a alguien.

Gracias

“…… justo todo lo que nos hace diferentes y superiores, nos hace peor y débiles: el oxigeno, la mente, la palabra y un corto e inútil etc”

Y

Indicar el separador en archivo csv en Mac, con Python(sep).

logo python

Ante todo, esta es una solución para personas que trabajen en Mac con Python y la librería Pandas, para no programadores, la solución es otra.

Un problema común, es que al crear un archivo csv, cometamos una equivocación y nuestro archivo no se visualice correctamente, lo que nos traerá problemas, sí como es mi caso quiero emplearlo como dataset en Python.

Digamos que tengo un archivo del tipo  Excel, con dos columnas «vendedores» y «ventas».

La columna «vendedores» tiene valores enteros, y la columna «ventas», valores decimales.

La dificultad a la que nos enfrentamos es que en Mac, para cambiar el separador hay que ir hasta el propio registro que establece los separadores decimales, de todo el sistema, ya sea directamente o mediante comandos(solución para no programadores).

Siendo como soy, enemigo de tocar lo que no debo tocar, para evitar errores futuros de los cuales olvidaré la causa, busqué una solución más sencilla, que ya existe en el «abc» de Pandas. El argumento sep().

Cuando creaba un csv, ya sea en formato UTF 8, o csv para Mac,  lo que hacia era separarme las filas por , coma y no punto y coma.

Pandas resuelve esto fácilmente, con él parámetro sep(), que permite escoger el separador en una cadena dada.

Veremos la salida del mismo archivo dos veces, sin utilizar sep y dándole uso.

Sin usar sep

 Utilizando sep

Espero modestamente que este artículo, sirva de ayuda a alguien.

Gracias

Y yo tenia respuesta a todas sus preguntas, incluso a las que aún no se ha hecho.

Y

¿Qué significa el guion bajo en Python?

logo python

Todo el que comienza a programar en en este lenguaje, se habrá preguntado cúal es el significado que tiene él guion bajo (_) en Python, y cuando se usa.

Recuperando también esa inquietud que tuve en su momento, intentare explicarle su importancia y uso. 

El guión bajo (_), es un carácter que se emplea  para diferentes tareas.

Almacenando el ultimo valor de interprete:

Como puede verse en el ejemplo, el guion almacena el ultimo valor que expresa el interprete de Python, incluso nos permite realizar diferentes operaciones matemáticas.

En la nomenclatura defunciones y variables, indicando una importancia especifica.

En este caso,  hay diferentes usos, que están regidos todos, por la convención PEP8, que es la que Python, recomienda como buenas practicas y utiliza.

Estos pueden ser:

Un guión bajo (_) después de un nombre (class_)

Se utiliza para evitar conflictos con palabras clave o con elementos integrados en Python.

Un guión bajo (_) antes de un nombre (_variable)

En este caso indica que el nombre que sigue al guion es una clase, función, método o variable, con carácter privado o interno, advirtiendo a quien acceda al código, este aspecto de su implementación.

Una salvedad aquí, es que en Python las variables no son del todo privadas, y si siempre se podrá acceder a ellas.

Un doble guión bajo (__) antes de un nombre (__perro)

En la documentación de Python, se especifica que ” cualquier mombre de la forma __spam se sustituye por _NombreClase__spam”.

Para nosotros, NombreClase(),  será el nombre de la clase  donde hemos colocado el doble guión bajo (__).

En definitiva, lo que hace Python en este caso, uno de los mas comunes, es manipular el nombre de la clase, para evitar conflictos

Un doble guion bajo (__) antes y después de un nombre ( __casa__)

Esta funcionalidad del guion,  se utiliza para indicar métodos específicos de Python, conocidos como métodos mágicos, __init__, __file__

Esta convención del lenguaje, es indicativa, normalmente podemos sobrescribir alguno de estos métodos, dándole otro significado, (yo prefiero no hacerlo, pero es totalmente posible).

Su objetivo no es otro, que evitar conflictos entre los métodos mágicos y algún método definido por nosotros, al momento de escribir el código.

Facilitando la legibilidad

Podemos usar el guion bajo (_), para separar los dígitos de un número de modo que sea mas fácil leerlo. Esta función es puramente decoradora y actúa un poco como el punto(.) que se añade en Excel a trabajar con datos en formato número.

Para internacionalizar cadenas

Tal y como sucede en C el guion bajo(_), se usa para indicar que una cadena es traducible.

En Python con el uso de  la librería gettext, se aplica esta convención, también

Ignorar valores

Cuando deseamos ignorar valores  basta con asignar un guion bajo (_). Esta funcionalidad, es fabulosa y puede utilizarse al recorrer arreglos, o desempaquetarlos.

……. y hasta aquí.

…., si avanzo sígueme, si me detengo empújame, si retrocedo mátame…….

Translate »