Tengo un marco de datos de pandas df. Quiero que df esté compuesto por 3 columnas: la primera es una marca (una cadena), la segunda es una lista de enteros y la tercera es una lista de flotantes. Entonces, para cada marca, tengo dos listas, y quiero ponerlas todas en un marco de datos para acceder fácilmente a diferentes listas basadas en el nombre de la marca.

Tengo:

count = [1,5,198,0,0,35]
brand = 'Nike'

Y para poner la lista de conteo en la columna 'conteo' correspondiente a la línea 'Nike' intenté lo siguiente:

df[df['brand']==brand].loc[0,'count'] = count
df[df['brand']==brand]['count'] == count
df[df['brand']==brand]['count'].loc[0] == count

Ninguno de estos funcionaría y obtengo ValueError: Must have equal len keys and value when setting with an iterable o A value is trying to be set on a copy of a slice from a DataFrame y nada cambia en df.

¿Cómo puedo escribir una lista en una celda de marco de datos de pandas?

4
Ilyes 10 may. 2016 a las 12:38

3 respuestas

La mejor respuesta

Puede usar sus marcas como nombres de columna:

import pandas as pd

df = pd.DataFrame({'Nike' : [[1,5,198,0,0,35],[0.5,0.3,0.2]]},index = ['count','floats'])

Y luego puedes agregar nuevas marcas como esta:

df['Puma'] = [[1,2,3],[0.1,0.2]]

Obtendrá este marco de datos:

        Nike                    Puma
count   [1, 5, 198, 0, 0, 35]   [1, 2, 3]
float   [0.5, 0.3, 0.2]         [0.1, 0.2]

Entonces acceder a los valores es realmente simple.

1
ysearka 10 may. 2016 a las 12:08

Puedes crearlo así. El tipo será object.

In [254]: df=pd.DataFrame({'Brand':['Nike','Puma'],
'count':[[1,2,3],[0,0]],'price':[[50.]*3,[100.]*2]})

In [255]: df
Out[255]: 
  Brand      count               price
0  Nike  [1, 2, 3]  [50.0, 50.0, 50.0]
1  Puma     [0, 0]      [100.0, 100.0]
0
B. M. 10 may. 2016 a las 10:11

Me parece que está creando un modelo de datos incorrecto. El modelo no está en la primera forma normal (1NF) y tendrá muchos problemas para usarlo. Por favor, intente usar un modelo normalizado.

   Brand     price
0  Nike     50.0
1  Nike     60.0
2  Nike     70.0
3  Puma     30.0
4  Puma     100.0

Puede obtener cualquier valor calculado de este modelo con facilidad.

3
knagaev 10 may. 2016 a las 10:29