オブジェクトに行を追加するという単純な作業は、pandas.DataFrame
達成するのが難しいようです。これに関連する 3 つの stackoverflow の質問がありますが、どれも有効な回答を提供しません。
これが私がやろうとしていることです。行と列の名前だけでなく、形状も既に知っている DataFrame があります。
>>> 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
これで、行の値を繰り返し計算する関数ができました。行の 1 つに辞書または を入力するにはどうすればよいpandas.Series
ですか? 失敗したさまざまな試みを次に示します。
>>> y = {'a':1, 'b':5, 'c':2, 'd':3}
>>> df['y'] = y
AssertionError: Length of values does not match length of index
行ではなく列を追加しようとしたようです。
>>> y = {'a':1, 'b':5, 'c':2, 'd':3}
>>> df.join(y)
AttributeError: 'builtin_function_or_method' object has no attribute 'is_unique'
非常に参考にならないエラー メッセージ。
>>> 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)
どうやらそれは、データフレームに個々の値を設定するためだけのものです。
>>> y = {'a':1, 'b':5, 'c':2, 'd':3}
>>> df.append(y)
Exception: Can only append a Series if ignore_index=True
まあ、私はインデックスを無視したくありません。それ以外の場合、結果は次のようになります。
>>> 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
列名を値に合わせましたが、行ラベルが失われました。
>>> 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
それも見事に失敗。
では、どうやってそれを行うのですか?