pandas: füllen einer Spalte mit einigen numpy arrays
Bin ich mit python2.7 und pandas 0.11.0.
Ich versuche, Sie zu füllen eine Spalte mit einem dataframe mit DataFrame.apply(func). Die func () - Funktion zurückgeben sollte, ein numpy-array (1x3).
import pandas as pd
import numpy as np
df= pd.DataFrame(np.random.randn(4, 3), columns=list('ABC'))
print(df)
A B C
0 0.910142 0.788300 0.114164
1 -0.603282 -0.625895 2.843130
2 1.823752 -0.091736 -0.107781
3 0.447743 -0.163605 0.514052
Die Funktion wird für Testzwecke:
def test(row):
# some complex calc here
# based on the values from different columns
return np.array((1,2,3))
df['D'] = df.apply(test, axis=1)
[...]
ValueError: Wrong number of items passed 1, indices imply 3
Das komische ist, dass wenn ich das dataframe aus dem nichts, es funktioniert ziemlich gut, und gibt als erwartet:
dic = {'A': {0: 0.9, 1: -0.6, 2: 1.8, 3: 0.4},
'C': {0: 0.1, 1: 2.8, 2: -0.1, 3: 0.5},
'B': {0: 0.7, 1: -0.6, 2: -0.1, 3: -0.1},
'D': {0:np.array((1,2,3)),
1:np.array((1,2,3)),
2:np.array((1,2,3)),
3:np.array((1,2,3))}}
df= pd.DataFrame(dic)
print(df)
A B C D
0 0.9 0.7 0.1 [1, 2, 3]
1 -0.6 -0.6 2.8 [1, 2, 3]
2 1.8 -0.1 -0.1 [1, 2, 3]
3 0.4 -0.1 0.5 [1, 2, 3]
Vielen Dank im Voraus
Sie sollten vermeiden Sie die Verwendung
Ich Schätze mal-Vektor-form ist natürlich für eine gewisse Menge, z.B. die Koordinaten.
list
s/tuple
s in DataFrame
s oder Series
. Warum nicht einfach 3 Spalten in df
oder eine separate DataFrame
mit Ihren Spalten?Ich Schätze mal-Vektor-form ist natürlich für eine gewisse Menge, z.B. die Koordinaten.
df.endPoint-df.startPoint
ist natürlich mehr vorzuziehen np.c_[df.endX-df.startX, df.endY-df.startY, df.endZ-df.startZ]
.InformationsquelleAutor Nic | 2013-09-05
Du musst angemeldet sein, um einen Kommentar abzugeben.
Wenn Sie versuchen, um return mehrere Werte aus der Funktion übergeben wird
apply
, und das DataFrame rufen Sie dieapply
auf die gleiche Anzahl von Element entlang der Achse (in diesem Fall Kolonnen) als die Anzahl der Werte zurückgegeben, Pandas erstellen Sie ein DataFrame von der Rückgabe-Werte mit den gleichen Etiketten wie das original DataFrame. Sie können sehen, wenn Sie gerade tun:Und das ist, warum Sie erhalten die Fehlermeldung, da Sie nicht zuordnen einen DataFrame, DataFrame Spalte.
Wenn Sie zurück jede andere Anzahl von Werten, wird es wieder nur ein series-Objekt zugewiesen werden kann:
Ich bin mir nicht sicher, warum die Pandas der dies tut, und warum tut es dies nur, wenn der return-Wert ist ein
list
oder einendarray
, da Sie es nicht tun, wenn man wieder eintuple
:Wenn die Länge der numpy-array ist nicht gleich der Anzahl der Spalten der code wird funktionieren, aber es ist nicht beabsichtigt, in einer Weise verwendet werden. Als Phillip Cloud sagte, Sie sollten vermeiden Sie die Platzierung von Listen oder arrays, die in Ihrer Serie. Sollten Sie mehrere Reihen (das heißt, mehrere Spalten in Ihrer DataFrame).
Danke Jungs. Ich werde dann Ihren Rat befolgen, und gehen Sie für 3 Spalten. @Phillip: tut mir Leid verfehlte ich Ihren Kommentar zuerst Lesen.
Ich möchte Euch einige array in der gleichen dataframe, ich wünschte, es war eine unterstützte Möglichkeit, dies zu tun.
Gibt es eine alternative zu den pandas, die funktionieren würde ? Ich verstehe nicht, den Punkt der nicht lassen die Benutzer wählen, was Objekt, das Sie wollen, um in einem dataframe.
InformationsquelleAutor Viktor Kerkez