Pandas Python: preencha uma linha de dados por linha

A tarefa simples de adicionar uma linha a umpandas.DataFrame objeto parece ser difícil de realizar. Existem 3 questões de stackoverflow relacionadas a isso, nenhuma das quais dá uma resposta funcional.

Aqui está o que estou tentando fazer. Eu tenho um DataFrame de que eu já conheço a forma, bem como os nomes das linhas e colunas.

>>> 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

Agora, tenho uma função para calcular os valores das linhas de maneira iterativa. Como posso preencher uma das linhas com um dicionário ou umpandas.Series ? Aqui estão várias tentativas que falharam:

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

Aparentemente, tentou adicionar uma coluna em vez de uma linha.

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

Mensagem de erro muito pouco informativa.

>>> 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)

Aparentemente, isso é apenas para definir valores individuais no dataframe.

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

Bem, eu não quero ignorar o índice, caso contrário, aqui está o resultado:

>>> 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

Ele alinhou os nomes das colunas com os valores, mas perdeu os rótulos das linhas.

>>> 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

Isso também falhou miseravelmente.

Então como você faz isso ?

questionAnswers(4)

yourAnswerToTheQuestion