Evitar Notación Cientéfica al pasar un dataframe de pandas a csv

I´m trying to save a pandas df column into a csv file. I dont want numbers in scientific notation in my output file. I´ve tried to use the argument float_format inside the df_to_csv but for some reason i am getting numbers in scientific notation just for the cases with negative exponents.

The column i want to have withount scientific notation is a mix of floats and strings. I´ve tried something like this:

df.to_csv(rutacsv, index=False, mode='w', sep=';', encoding='latin-1', float_format='%.12f', decimal='.')

I´ve also tried to use setting pandas display options, df.round() and some sort of things that didn´t work for me.

thanks in advice.

Agrupación de líneas similares de un dataframe para detectar duplicados

Tengo unconjunto de datos que contiene todos los anuncios inmobiliarios en venta en curso de publicación de una ciudad :

    ID  URL CRAWL_SOURCE    PROPERTY_TYPE   NEW_BUILD   DESCRIPTION IMAGES  SURFACE LAND_SURFACE    BALCONY_SURFACE ... DEALER_NAME DEALER_TYPE CITY_ID CITY    ZIP_CODE    DEPT_CODE   PUBLICATION_START_DATE  PUBLICATION_END_DATE    LAST_CRAWL_DATE LAST_PRICE_DECREASE_DATE 0   22c05930-0eb5-11e7-b53d-bbead8ba43fe    http://www.avendrealouer.fr/location/levallois...   A_VENDRE_A_LOUER    APARTMENT   False   Au rez de chaussée d'un bel immeuble récent,...   ["https://cf-medias.avendrealouer.fr/image/_87...   72.0    NaN NaN ... Lamirand Et Associes    AGENCY  54178039    Levallois-Perret    92300.0 92  2017-03-22T04:07:56.095 NaN 2017-04-21T18:52:35.733 NaN 1   8d092fa0-bb99-11e8-a7c9-852783b5a69d    https://www.bienici.com/annonce/ag440414-16547...   BIEN_ICI    APARTMENT   False   Je vous propose un appartement dans la rue Col...   ["http://photos.ubiflow.net/440414/165474561/p...   48.0    NaN NaN ... Proprietes Privees  MANDATARY   54178039    Levallois-Perret    92300.0 92  2018-09-18T11:04:44.461 NaN 2019-06-06T10:08:10.89  2018-09-25 

Me gustaría agrupar los anuncios inmobiliarios de un mismo inmueble. En efecto, varios profesionales (ver particular) publican anuncios en varios portales inmobiliarios de un mismo inmueble.

ID  URL CRAWL_SOURCE    PROPERTY_TYPE   NEW_BUILD   DESCRIPTION IMAGES  SURFACE LAND_SURFACE    BALCONY_SURFACE ... DEALER_NAME DEALER_TYPE CITY_ID CITY    ZIP_CODE    DEPT_CODE   PUBLICATION_START_DATE  PUBLICATION_END_DATE    LAST_CRAWL_DATE LAST_PRICE_DECREASE_DATE 

¿Qué metodología podría usar para detectar duplicados si las filas no lo son? Hasta ahora he pensado eitehr de comprobar si la descripción es exactamente la misma (pero tendría que eliminar los caracteres especiales antes) o si las imágenes en la url son las mismas (pero no soy una estrella en el procesamiento de imágenes)

En mi opinión, en la medida en que la gente que publique las mismas casas lo haga en un sitio web diferente, no serán duplicados en el mismo sitio web. Probablemente la gente publica la misma “DESCRIPCION” o las mismas “IMAGENES”. Las casas seguramente tienen la misma superficie, sin embargo, podemos tener varios distribuidores para una misma casa. Así que lo hice:

# Añadamos una nueva columna booleana a nuestro DataFrame que identificará una partida de pedido duplicada (False=Not a duplicate; True=Duplicate) df['is_duplicated'] = df.duplicated(['DESCRIPCION']) 

E hizo la suma:

# Podemos sumar en una columna booleana para obtener un recuento de los artículos de orden duplicados. df['is_duplicated'].sum() 

Que devolvió 249. Aún no sé cómo comparar las imágenes.

¿Existe una mejor estrategia?

Como convertir varias filas de una columna en una lista dentro de un dataframe

Sucede que tengo 2 columnas que se interrelacionan: la primera son nombres y la segunda son conteos de entradas de esa persona en un gimnasio a la semana.

en la primer columna los nombres se repiten cuantas veces haya entrada en la segunda variable, así:

     c1  nom  entr        0    0   E    1   1    1   A    2   2    2   B    5   3    3   A    3   4    4   C    6    

existen repeticiones entre nombres con muchos valores en las entradas al gimnasio que se verían de esta forma:

     nom   entr 28   A    6 1    A    2 30   A    1 3    A    3 23   A    1 5    A    7 6    A    9 26   A    8 33   B    4 34   B    6 14   B    9 36   B    8 9    B    3 7    B    1 2    B    5 10   C    7 37   C    9 4    C    6 

En este caso en vez de ver cada letra repitiéndose me gustaría ver solo 1 letra y las entradas al lado de esta, algo como esto:

supongamos que yo quiero ver la media de las entradas por nombre sería algo así

        entr nom           A    4.625000 B    5.142857 C    5.400000 D    3.833333 E    4.785714  

esto mismo es lo que me gustaría ver pero con cada entrada, más o menos así pero con los valores reales

              entr nom           A    1:2:3:5:7:8:10 B         1:2:4:7:8 C             1:6:9 D    1:2:3:5:7:8:10 E    1:2:3:5:7:8:10  

¿cómo podría hacerlo?

Extraer nombre de columna de un valor máximo por fila de una dataframe en python

Buen dia a todos,

Tengo el siguiente dataframe y quiero extraer las columnas según el valor máximo de cada fila, como se muestra a continuación.

     E   D   C  B  A  A1 0   27  17  20  3  2   0 1   19  20  13  2  0   0 2   28  22  23  5  2   0 3   42  14  18  3  1   0 4   34  19  12  4  3   0 5   34  20  15  0  1   0 6   32  28  16  4  3   1 7   19  23  17  5  0   0 8   37  17  18  4  2   1 9   33  22  14  1  1   0 10  53  24  16  5  0   0 11  18  17  13  0  0   0 12  33  17  15  4  1   0 13  33  22  12  2  2   0 14  20  19  12  2  1   0 

Y requiero obtener la siguiente lista:

[E,D,E,E,E,E,E,D,E,E,E,E,E,E,E] 

Esta lista representa la columna donde se encuentra el valor máximo de cada fila.

[27, 20, 28, 42, 34, 34, 32, 23, 37, 33, 53, 18, 33, 33, 20] 

La lista de valores son los máximos extraídos de cada fila del dataframe.

He intentado con el siguiente código pero no me ha funcionado.

Destra =[] for i in range(15):     DFi = df[i:i+1]     Destra.append(DFi.values.max())   VEs = []     for j in range(15):     DFj = df[j:j+1]     sDF = DFj.loc[::] == Destra[j]     Vj = sDF.columns.get_values()[True]     VEs.append(Vj) VEs 

Por que cuyo resultado es:

['D', 'D', 'D', 'D', 'D', 'D', 'D', 'D', 'D', 'D', 'D', 'D', 'D', 'D', 'D'] 

Y no es lo que estoy buscando.

Gracias por su colaboración.

Saludos

Obter o valor máximo de cada linha em um dataframe agrupado pandas

Tenho um dataframe pandas com UF, Municipio, Classe_Acidente, Total.

Nesse dataframe cada Município aparece três vezes, uma para cada Classe de acidente (são 3 classes) e eu preciso obter o valor máximo para cada classe de acidente. Ou seja, tenho que percorrer o dataframe inteiro e obter o máximo de cada classe, por UF.

Fiz

dfAcidentesPorMunicipiosPorUF = dfAcidentesPorMunicipiosPorUF.groupby(['uf','municipio','classificacao_acidente'])['classificacao_acidente'].count().reset_index(name="Total") 

E retornou agrupado corretamente, mas, não consigo obter o máximo.

    uf  municipio     classificacao_acidente       Total 0   AC  ACRELANDIA    Com Vítimas Feridas           10 1   AC  ASSIS BRASIL  Sem Vítimas                   6 2   AC  BRASILEIA     Com Vítimas Fatais            5 3   AC  BRASILEIA     Com Vítimas Feridas           8 4   AC  BRASILEIA     Sem Vítimas                   2 5   AC  BUJARI        Com Vítimas Fatais            5 6   AC  BUJARI        Com Vítimas Feridas           65 7   AC  BUJARI        Sem Vítimas                   26 47  TO  PARAISO DO    Sem Vítimas                   59 47  TO  PEDRO AFONSO  Com Vítimas Feridas           4 47  TO  PEIXE         Com Vítimas Fatais            18 47  TO  PEIXE         Com Vítimas Feridas           23 47  TO  PIRAQUE       Com Vítimas Feridas           5 47  TO  PIRAQUE       Sem Vítimas                   1 47  TO  KENNEDY       Com Vítimas Fatais            6 47  TO  KENNEDY       Com Vítimas Feridas           25 47  TO  KENNEDY       Sem Vítimas                   22  

Alguma ideia de como fazer isso?

Já quebrei a cabeça, mas, não consegui.

Obrigado.

Eliminar filas duplicadas según una columna y quedarme con la suma de los valores de otra columna Dataframe Python

importaré un excel que convertiré a DataFrame y lo que necesito es eliminar las filas repetidas en la columna Código y en la columna Longitud obtener la suma de todas las filas que tenían el mismo valor.

Excel que importaré

Por tanto en este caso el resultado obtenido debería ser dos filas, una con el código sombreado en amarillo y otra con el código sombreado en violeta y en la columna Longitud obtener la suma de los 5 registros amarillos y en la siguiente la suma de los 4 registros Longitud violetas.

Un saludo y muchas gracias

How to parse RDD to Dataframe with dinamic typed

I’m trying to parse a RDD[Seq[String]] to Dataframe. ALthough it’s a Seq of Strings they could have a more specific type as Int, Boolean, Double, String an so on. For example, a line could be:

"hello", "1", "bye", "1.1" "hello1", "11", "bye1", "2.1" ... 

Another execution could have a different number of columns.

First column is going to be always a String, second an int and so on and it’s going to be always on this way. On the other hand, one execution could have seq of five elements and others execution could have 2000, so it depends of the execution. In each execution the name of type of columns is defined.

To do it, I could have something like this:

//I could have a parameter to generate the StructType dinamically. def getSchema(): StructType = {   var schemaArray = scala.collection.mutable.ArrayBuffer[StructField]()   schemaArray += StructField("col1" , IntegerType, true)   schemaArray += StructField("col2" , StringType, true)   schemaArray += StructField("col3" , DoubleType, true)   StructType(schemaArray) }  //Array of Any?? it doesn't seem the best option!! val l1: Seq[Any] = Seq(1,"2", 1.1 ) val rdd1 = sc.parallelize(Lz).map(Row.fromSeq(_))  val schema = getSchema() val df = sqlContext.createDataFrame(rdd1, schema) df.show() df.schema 

I don’t like at all to have a Seq of Any, but it’s really what I have. Another chance??

On the other hand I was thinking that I have something similar to a CSV, I could create one. With spark there is a library to read an CSV and return a dataframe where types are infered. Is it possible to call it if I have already an RDD[String]?

Como crear nueva columna Datetime en Dataframe Python a partir de otras columnas donde tengo el dia, mes y año

A partir de un Data frame rt en Pyhton con la siguiente estructura

Dataframe

quiero crear una columna nueva que sea Datetime, con los datos de la columna “Mes” , “Dia” y el año actual. Estoy tratando de hacerlo con la siguiente instrucción pero me falla:

rt['Date']=datetime.datetime(date.today().year, rt['Mes'], rt['Dia'])

Me da este error:

Traceback (most recent call last):    File "<ipython-input-28-55c5a330e1fb>", line 1, in <module>     rt['Date']=datetime.datetime(date.today().year, rt['Mes'], rt['Dia'])    File "C:\Users\Usuario\Anaconda3\lib\site-packages\pandas\core\series.py", line 118, in wrapper     "{0}".format(str(converter)))  TypeError: cannot convert the series to <class 'int'>```  

transformar itens de uma lista em colunas separadas ou estender dataframe até o final

Tenho uma classe com um elemento que é uma lista estou tentando exibir em um dataframe do pandas essa lista em uma unica linha para representar o inventario do personagem.

atribuição dos itens na lista:

if self.wealth == "rich":         self.inventory = ["dagger","nobles's clothing", "cloak","backpack","rations for a week","waterskin",                           "potion of healing","pouch for coins","personal servant","personal guard", " three saddled horses"] 

estou fazendo o dataframe dessa forma porem acaba cortando a lista por ser muito grande, gostaria de fazer de um jeito que não cortasse essa linha.

inventory = pd.DataFrame({"Inventory": [self.inventory]," ": " "}) inventory.set_index(" ", inplace=True)  display(inventory)