行を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つを辞書またはaで埋めるにはどうすればよい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
それも無残に失敗しました。
それで、どうやってそれを行うのですか?
loc
データフレームの属性は、__setitem__
私が推測する魔法を実行する特別なものを定義します。