2012-08-18 4 views
2

J'ai besoin d'ajouter des colonnes de manière itérative à un objet DataFrame. Ceci est une version simplifiée:l'ajout de colonnes produit NaN dans pandas DataFrame

>>> x=DataFrame() 
>>> for i in 'ps': 
... x = x.append(DataFrame({i:[3,4]})) 
... 
>>> x 
    p s 
0 3 NaN 
1 4 NaN 
0 NaN 3 
1 NaN 4 

Que dois-je faire pour obtenir:

p s 
0 3 3 
1 4 4 

?

Répondre

2

Votre idée de créer la dict première est probablement la meilleure façon:

>>> from pandas import * 
>>> DataFrame({c: [1,2] for c in 'sp'}) 
    p s 
0 1 1 
1 2 2 

(ici en utilisant compréhensions dictionnaire, disponible en Python 2.7). Juste pour être complet, cependant, vous pouvez - inefficacement - utiliser join ou concat pour obtenir une approche colonne par colonne pour travailler:

>>> df = DataFrame() 
>>> for c in 'sp': 
...  df = concat([df, DataFrame({c: [1,2]})], axis=1) 
... 
>>> print df 
    s p 
0 1 1 
1 2 2 
>>> 
>>> df = DataFrame() 
>>> for c in 'sp': 
...  df = df.join(DataFrame({c: [1,2]}), how='outer') 
... 
>>> print df 
    s p 
0 1 1 
1 2 2 

Mais votre idée [Vous pouvez voir la différence dans l'ordre des colonnes.] de construire le dict puis de construire le DataFrame à partir du dict construit est une bien meilleure approche.

Questions connexes