Python pandas: データフレームを行ごとに埋める 質問する

Python pandas: データフレームを行ごとに埋める 質問する

オブジェクトに行を追加するという単純なタスクは、pandas.DataFrame実行するのが難しいようです。これに関連する StackOverflow の質問が 3 件ありますが、いずれも有効な回答を提供していません。

私がやろうとしていることは次のとおりです。行と列の名前と形状がすでにわかっている 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

それも惨めに失敗しました。

それでどうやってやるんですか?

ベストアンサー1

df['y']列を設定します

行を設定するには、.loc

ここで同等であることに注意してください.ix。行の各要素に辞書を割り当てようとしたため、yおそらく望んでいたものではないため失敗しました。シリーズに変換すると、入力を揃えたいことがパンダに伝えられます(たとえば、すべての要素を指定する必要はありません)。

In [6]: import pandas as pd

In [7]: df = pd.DataFrame(columns=['a','b','c','d'], index=['x','y','z'])

In [8]: df.loc['y'] = pd.Series({'a':1, 'b':5, 'c':2, 'd':3})

In [9]: df
Out[9]: 
     a    b    c    d
x  NaN  NaN  NaN  NaN
y    1    5    2    3
z  NaN  NaN  NaN  NaN

おすすめ記事