2016-05-10 3 views
0

Ich habe einen Pandas Datenrahmen df. Ich möchte, dass df aus 3 Spalten besteht: die erste ist ein Markenname (eine Zeichenkette), die zweite ist eine Liste von ganzen Zahlen und die dritte ist eine Liste von Fließkommazahlen. Also habe ich für jede Marke zwei Listen, und ich möchte sie alle in einen Datenrahmen setzen, um leicht auf verschiedene Listen basierend auf dem Markennamen zuzugreifen.Definieren Sie einen Spaltentyp als 'Liste' in Pandas

ich habe:

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

und die Zählliste in die ‚count‘ Spalte ‚Nike‘ Linie entsprechend habe ich versucht, die folgenden:

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

Nichts davon würde funktionieren und Ich bekomme ValueError: Must have equal len keys and value when setting with an iterable oder und nichts ändert sich in df.

Wie kann ich eine Liste in eine Pandas-Datenrahmenzelle schreiben?

Antwort

0

Sie können Ihre Marken als Spaltennamen verwenden:

import pandas as pd 

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

und dann können Sie neue Marken wie folgt hinzu:

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

Sie diese Datenrahmen erhalten wird:

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

Dann ist der Zugriff auf die Werte wirklich einfach.

0

Sie können es so erstellen. Der Typ lautet 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

Vielen Dank für Ihre Antwort, gibt es keine Möglichkeit, die Felder zu füllen, nachdem der Datenrahmen erstellt wurde? – Ilyes

+0

ja df.ix [0,1] .append (4) zum Beispiel. –

2

Es scheint mir, dass Sie ein falsches Datenmodell aufbauen. Das Modell befindet sich nicht in der ersten Normalform (1NF) und Sie werden viele Probleme damit haben. Bitte versuchen Sie ein normalisiertes Modell zu verwenden.

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

Sie können jeden berechneten Wert aus diesem Modell mit Leichtigkeit abrufen.

Verwandte Themen