La simple tâche d'ajouter une ligne à un pandas.DataFrameobjet semble être difficile à accomplir. Il y a 3 questions de stackoverflow liées à cela, dont aucune ne donne de réponse fonctionnelle.
Voici ce que j'essaye 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  NaNMaintenant, j'ai une fonction pour calculer les valeurs des lignes de manière itérative. Comment puis-je remplir l'une des lignes avec un dictionnaire ou un pandas.Series? Voici 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 indexApparemment, 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'Message d'erreur très peu informatif.
>>> 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, ce n'est que pour définir 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=TrueEh bien, je ne veux pas ignorer l'index, 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    3Il a aligné les noms de colonne avec les valeurs, mais 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                               NaNCela a également échoué lamentablement.
Alors, comment faites-vous cela?
locattribut de la trame de données définit un spécial__setitem__qui fait la magie je suppose.