2016-06-21 4 views
-2

Ich habe ein Wörterbuch "my_dict“bestellt, der mit n Zeitreihe während einer Schleife gefüllt wird alle n Zeitreihe haben die gleiche Länge und sind 1-dimensional. Sie sind alle ein Datetime-Index haben.Concatinate pandas Datenrahmen von OrderedDict -. Python entspricht R's do.call (merge, list)

In RI nur do.call(merge, my_dict) laufen, wo my_dict ein list() ist und ich bekommen ein m x n xts Objekt mit einem einzigen Index.

In Python jedoch pandas.concat(my_dict, axis = 1) kehrt ein einzelner indizierter Datenrahmen (was gut ist), aber alle Spalten von t Die Sekundenspalte ist NaNs. Was ist der richtige Befehl?

+0

Können Sie Probe und gewünschte Ausgabe hinzufügen? Denn für mich gibt es zurück 'TypeError: kann nicht ein NDFrame-Objekt verketten ', wenn' concat' 'OrderedDict' – jezrael

+0

. @ Pat, bitte fügen Sie Daten hinzu, und die Ausgabe, nach der Sie suchen .. Und warum verwenden Sie ein geordneter dict? – Merlin

+0

'pandas.DataFrame (my_dict)' sollte es tun. – JaminSore

Antwort

0

A pandas.DataFrame kann direkt aus einem Wörterbuch so aufgebaut sein, alles, was Sie tun müssen, ist my_dict an den pandas.DataFrame Konstruktor übergeben (das heißt, pandas.DataFrame(my_dict)). Zum Beispiel:

import pandas 
from collections import OrderedDict 
import numpy as np 

m = 10 
n = 5 

index = pandas.date_range('1/1/2015', periods=m, freq='D') 
my_dict = OrderedDict() 

for i in range(1, n+1): 
    my_dict['var_%d' % i] = pandas.Series(np.random.randn(index.shape[0]), index=index) 

print(pandas.DataFrame(my_dict)) 

       var_1  var_2  var_3  var_4  var_5 
2015-01-01 0.562952 0.708099 0.488981 -1.360356 -0.036179 
2015-01-02 -0.481410 0.604777 0.233426 -0.784103 1.879795 
2015-01-03 1.188333 0.299547 -0.578365 0.882410 0.919328 
2015-01-04 -1.002273 0.794856 -0.527205 1.474524 -0.798646 
2015-01-05 -0.025225 2.246476 -0.460735 0.272014 -0.061749 
2015-01-06 -1.304233 1.204737 0.040275 0.293035 0.831555 
2015-01-07 -0.934804 0.922393 0.633133 1.064837 -0.154307 
2015-01-08 0.440650 0.235624 0.765399 0.306628 -0.274465 
2015-01-09 1.637787 -0.158231 -0.643112 -1.128660 0.393349 
2015-01-10 0.145501 -0.667916 1.094961 -1.669178 0.447021 
+0

Dies liefert "ValueError: Wenn Sie alle skalaren Werte verwenden, müssen Sie einen Index übergeben". Ist es möglich, dass es etwas mit dem Index zu tun hat, der ein Datetime-Index mit Mikrosekundenfrequenz ist? – Pat

+0

Nein, das funktioniert genauso gut mit Mikrosekundenfrequenz. Wenn Sie "Zeitreihe" sagen, meinen Sie ein 'pandas.Series'-Objekt mit einem Datetime-Index oder etwas anderem? Könnten Sie ein Beispiel für die Daten in Ihrem 'OrderedDict' bereitstellen? – JaminSore