Python pandas: remplissez un dataframe ligne par ligne

La simple tâche de l'ajout d'une ligne à une pandas.DataFrame objet semble être difficile à accomplir. Il y a 3 stackoverflow les questions relatives au présent, aucune de donner un travail de réponse.

Voici ce que je suis en train de faire. J'ai un DataFrame dont je connais déjà la forme ainsi que les noms des lignes et des colonnes.

>>> df = pandas.DataFrame(columns=['a','b','c','d'], index=['x','y','z'])
>>> df
     a    b    c    d
x  NaN  NaN  NaN  NaN
y  NaN  NaN  NaN  NaN
z  NaN  NaN  NaN  NaN

Maintenant, j'ai une fonction pour calculer les valeurs des lignes de manière itérative. Comment puis-je remplir dans l'une des lignes avec un dictionnaire ou un pandas.Series ? Voici les différentes tentatives qui ont échoué:

>>> y = {'a':1, 'b':5, 'c':2, 'd':3} 
>>> df['y'] = y
AssertionError: Length of values does not match length of index

Apparemment, il a essayé d'ajouter une colonne au lieu d'une ligne.

>>> y = {'a':1, 'b':5, 'c':2, 'd':3} 
>>> df.join(y)
AttributeError: 'builtin_function_or_method' object has no attribute 'is_unique'

Très peu de message d'erreur.

>>> y = {'a':1, 'b':5, 'c':2, 'd':3} 
>>> df.set_value(index='y', value=y)
TypeError: set_value() takes exactly 4 arguments (3 given)

Apparemment c'est uniquement pour le réglage des valeurs individuelles dans le dataframe.

>>> y = {'a':1, 'b':5, 'c':2, 'd':3} 
>>> df.append(y)
Exception: Can only append a Series if ignore_index=True

Bien, je ne veux pas ignorer l'indice, sinon voici le résultat:

>>> df.append(y, ignore_index=True)
     a    b    c    d
0  NaN  NaN  NaN  NaN
1  NaN  NaN  NaN  NaN
2  NaN  NaN  NaN  NaN
3    1    5    2    3

Il n'a aligner les noms de colonne avec les valeurs, mais il a perdu les étiquettes de ligne.

>>> y = {'a':1, 'b':5, 'c':2, 'd':3} 
>>> df.ix['y'] = y
>>> df
                                  a                                 b  \
x                               NaN                               NaN
y  {'a': 1, 'c': 2, 'b': 5, 'd': 3}  {'a': 1, 'c': 2, 'b': 5, 'd': 3}
z                               NaN                               NaN

                                  c                                 d
x                               NaN                               NaN
y  {'a': 1, 'c': 2, 'b': 5, 'd': 3}  {'a': 1, 'c': 2, 'b': 5, 'd': 3}
z                               NaN                               NaN

Aussi lamentablement échoué.

Alors, comment faites-vous ?

InformationsquelleAutor xApple | 2013-06-13