2013-01-17 22 views
7

Es sieht für mich wie ein Fehler in pandas.Series.Umgestaltung der Pandas-Serie?

a = pd.Series([1,2,3,4]) 
b = a.reshape(2,2) 
b 

b hat Series geben, aber nicht angezeigt werden kann, die letzte Anweisung gibt Ausnahme, sehr lang, die letzte Zeile ist „Typeerror:% d Format: eine Zahl erforderlich ist, nicht numpy.ndarray“. b.shape gibt (2,2) zurück, was seinem Typ Series widerspricht. Ich rate vielleicht pandas.Series implementiert keine Umformfunktion und ich rufe die Version von np.array auf? Jeder sieht diesen Fehler auch? Ich bin bei Pandas 0.9.1.

+2

Ich bin nicht sehr vertraut mit Pandas, aber ich verstehe, dass seine Reize und Einschränkungen liegen dedizierte Objekte für Arrays unterschiedlicher Dimensionen. Selbst wenn es im Hintergrund "numpy" gibt, ist "pd.Series" immer 1D und "pd.DataFrame" ist immer 2D. Das Umformen eines dieser Objekte ist also nicht sinnvoll. – Jaime

+0

Und "der Weg ** dein ** Tun" sollte "der Weg sein ** du machst **" ... Schande über mich! – Jaime

Antwort

11

Sie können reshape auf den Werte Array der Serie nennen: (ignorieren Sie den Index)

In [4]: a.values.reshape(2,2) 
Out[4]: 
array([[1, 2], 
     [3, 4]], dtype=int64) 

ich es eigentlich denken, wird nicht immer Sinn reshape auf eine Serie anzuwenden machen, und dass Sie richtig sind, es in das denken ist nur numpy des reshape:

a.reshape?
Docstring: See numpy.ndarray.reshape

, die besagten, stimme ich die Tatsache, dass es lassen Sie versuchen, dies zu tun, wie ein Fehler aussieht.

+0

Ich habe einmal 'ndarray' subclassiert, um ein festes Dimensionalitätsobjekt zu implementieren. Es ist verlockend, die 'Umgestaltungen' zu fangen und sie nicht zuzulassen, aber viele der coolen Dinge, die Sie auf Anhieb lieben gelernt haben, beruhen auf der Veränderung der Dimensionen der zugrunde liegenden Daten, z. loswerden 'reshape' und' tile' funktioniert nicht mehr. Vielleicht ist das ein kleiner, unvermeidbarer Preis, den man bezahlen muss, um die numpige Engine in Pandas wiederzuverwenden. – Jaime

+0

@Jaime die Tatsache, dass es eine Ausnahme verursacht, wenn Sie es versuchen, ist sicherlich ein Fehler, entweder sollte es Sie tun, um es zu einem DataFrame (und Reindex) oder die Methode sollte nicht verfügbar sein? –

+0

Der Punkt ist, Sie können es nicht verfügbar machen, ohne andere Funktionalität zu brechen, es sei denn, Sie sind bereit, eine Menge von was numpy gibt Ihnen kostenlos wieder herzustellen. Es ist nicht nett, stimme ich zu, aber es könnte wirklich das Beste sein, was möglich ist. – Jaime

1

Die reshape Funktion nimmt die neue Form als Tupel statt als mehrere Argumente:

In [4]: a.reshape? 
Type:  function 
String Form:<function reshape at 0x1023d2578> 
File:  /Library/Frameworks/EPD64.framework/Versions/7.3/lib/python2.7/site-packages/numpy/core/fromnumeric.py 
Definition: numpy.reshape(a, newshape, order='C') 
Docstring: 
Gives a new shape to an array without changing its data. 

Parameters 
---------- 
a : array_like 
    Array to be reshaped. 
newshape : int or tuple of ints 
    The new shape should be compatible with the original shape. If 
    an integer, then the result will be a 1-D array of that length. 
    One shape dimension can be -1. In this case, the value is inferred 
    from the length of the array and remaining dimensions. 

Reshape tatsächlich in Serie umgesetzt und wird eine ndarray zurück:

In [11]: a 
Out[11]: 
0 1 
1 2 
2 3 
3 4 

In [12]: a.reshape((2, 2)) 
Out[12]: 
array([[1, 2], 
     [3, 4]]) 
0

Sie direkt können Verwenden Sie , um eine Serie umzuformen, aber Sie können einen Pandas DataFrame nicht direkt umformen, da es keine Umformfunktion für Pandas DataFrame gibt, aber Sie können die Umformung von numpy ndarray vornehmen:

  1. convert Datenrahmen numpy ndarray
  2. do umformen
  3. konvertieren zurück

z.B.

a = pd.DataFrame([[1,2,3],[4,5,6]]) 
b = a.as_matrix().reshape(3,2) 
a = pd.DataFrame(b) 
0

Gerade dieser Code unten verwenden:

b=a.values.reshape(2,2) 

Ich denke, es wird Ihnen helfen. können Sie direkt nur reshape() -Funktion verwenden, aber es wird zukünftige Warnung geben

+1

Fügen Sie ein paar Erklärungen zusammen mit dem Code hinzu, um den Code zu verstehen. Nur Code-Antworten sind verpönt. –

Verwandte Themen