2017-06-15 1 views
2

Ich habe ein Wörterbuch von Datenrahmen erstellt, um meine Daten zu speichern. Ich muss für jeden Datenrahmen, für den ich versuche, iteritems() zu verwenden, um das Wörterbuch zu durchlaufen, etwas tun. Aber irgendwie scheint ich nicht in der Lage zu sein, irgendetwas mit den Datenrahmen zu tun. Code kompiliert und wirft keine Fehler, es scheint nur nichts zu tun.Pandas Datenrahmen in einem Wörterbuch bei der Verwendung von iteritems()

hier eine Vereinfachung meiner Code:

Dies macht nur eine Probe Wörterbuch von Datenrahmen

dic={} 
df1=pd.DataFrame(np.random.randn(10,5),columns=['a','b','c','d','e']) 
df2=pd.DataFrame(np.random.randn(10,5),columns=['a','b','c','d','e']) 
df3=pd.DataFrame(np.random.randn(10,5),columns=['a','b','c','d','e']) 
df4=pd.DataFrame(np.random.randn(10,5),columns=['a','b','c','d','e']) 
df5=pd.DataFrame(np.random.randn(10,5),columns=['a','b','c','d','e']) 

dic[1]=df1 
dic[2]=df2 
dic[3]=df3 
dic[4]=df4 
dic[5]=df5 

Und dies ist eine Reihe grundlegender Dinge, die ich zu jedem Datenrahmen tun wollen.

for key, item in dic.iteritems(): 
    item=item.reset_index()  
    item['Rank']=(item.index)+1 

So, nach der Iteration ich jeden Datenrahmen erwarten eine zusätzliche Spalte mit dem alten Index zu haben, und ein weitere zusätzliche Spalte mit der „Rank“ wie folgt:

Expected

Statt dem Datenrahmen scheint durch die Operationen nicht betroffen zu sein und sieht genauso aus wie zuvor:

Reality

I habe versucht, auch einen temporären Datenrahmen innerhalb der Iteration zu verwenden und dann zu versuchen, ihn mit dem gleichen Ergebnis in "item" zu schreiben. Ich frage mich nur, ob das, was ich tun möchte, überhaupt möglich ist oder vielleicht muss ich es umgehen und eine andere Methode verwenden, um meine Ziele zu erreichen.

Antwort

0

Ich glaube, Sie zuweisen müssen DataFrame wieder nur, auch wollen, wenn python 2 and 3 Code Verwendung items():

for key, item in dic.items(): 
    item=item.reset_index()  
    item['Rank']=(item.index)+1 
    dic[key] = item 

print (dic[1]) 
    index   a   b   c   d   e Rank 
0  0 -1.085631 0.997345 0.282978 -1.506295 -0.578600  1 
1  1 1.651437 -2.426679 -0.428913 1.265936 -0.866740  2 
2  2 -0.678886 -0.094709 1.491390 -0.638902 -0.443982  3 
3  3 -0.434351 2.205930 2.186786 1.004054 0.386186  4 
4  4 0.737369 1.490732 -0.935834 1.175829 -1.253881  5 
5  5 -0.637752 0.907105 -1.428681 -0.140069 -0.861755  6 
6  6 -0.255619 -2.798589 -1.771533 -0.699877 0.927462  7 
7  7 -0.173636 0.002846 0.688223 -0.879536 0.283627  8 
8  8 -0.805367 -1.727669 -0.390900 0.573806 0.338589  9 
9  9 -0.011830 2.392365 0.412912 0.978736 2.238143 10 
+0

Mann, der war genial. Es wirkt wie ein Zauber! Ich wusste, dass ich gerade etwas vermisste. –

+0

Nun, da ich dich hier habe, was ist der Unterschied zwischen iteritems() und items() ... ist iteritems() veraltet? –

+0

Schwierige Frage für mich, aber [hier] (https://Stackoverflow.com/a/3294899/2901002) es besser erklären. – jezrael

-1

zuordnen Artikel der Datenrahmen zurück zu dic [key]

for key, item in dic.items(): 
    item=item.reset_index()  
    item['Rank']=(item.index)+1 
    dic[key] = item 
+0

Gerade kam ein wenig spät, aber Sie haben es auch richtig! Vielen Dank ! –

Verwandte Themen