Sto usando python2.7 e pandas 0.11.0.panda: riempire una colonna con alcuni array numpy
Provo a riempire una colonna di un dataframe utilizzando DataFrame.apply (func). La funzione func() dovrebbe restituire un array numpy (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
La funzione utilizzata a scopo di test:
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
Il divertente è che quando creo il dataframe da zero, funziona piuttosto bene, e ritorna come previsto:
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]
Grazie in anticipo
si dovrebbe evitare di utilizzare '' list's/tuple's in '' DataFrame's o Series '. Perché non avere solo 3 colonne in 'df' o un separato' DataFrame' con le tue colonne? –
Suppongo che a volte la forma vettoriale sia più naturale per alcune quantità, ad esempio coordinate. 'df.endPoint-df.startPoint' è ovviamente più preferibile a' np.c_ [df.endX-df.startX, df.endY-df.startY, df.endZ-df.startZ] '. – herrlich10