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 lists/tuples in DataFrames 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

Schreibe einen Kommentar