1. ホーム
  2. python

[解決済み] Pandas Dataframe / Numpy Arrayの "axis "定義における曖昧さ

2022-12-11 10:19:01

質問

Pythonの軸がどのように定義されるのか、また、DataFrameの行と列のどちらを参照するのかについて非常に混乱しています。以下のコードを考えてみてください。

>>> df = pd.DataFrame([[1, 1, 1, 1], [2, 2, 2, 2], [3, 3, 3, 3]], columns=["col1", "col2", "col3", "col4"])
>>> df
   col1  col2  col3  col4
0     1     1     1     1
1     2     2     2     2
2     3     3     3     3

ということで、もし df.mean(axis=1) を呼び出すと、行全体の平均が得られます。

>>> df.mean(axis=1)
0    1
1    2
2    3

しかし,もし df.drop(name, axis=1) を呼び出すと、実際には 列を削除します。 であり、行ではありません。

>>> df.drop("col4", axis=1)
   col1  col2  col3
0     1     1     1
1     2     2     2
2     3     3     3

pandas/numpy/scipyの"axis"の意味を理解するのを誰か助けてくれませんか?

余談ですが DataFrame.mean は間違って定義されている可能性があります。のドキュメントによると DataFrame.mean axis=1 は行ではなく列の平均を意味するはずですが...。

どのように解決するのですか?

おそらく、次のように覚えるのが最も簡単でしょう。 0=下 であり 1=横 .

ということになります。

  • 使用する axis=0 を使用して、各列の下、または行のラベル(インデックス)にメソッドを適用します。
  • 使用する axis=1 を使用して、各行全体、または列のラベルにメソッドを適用します。

各軸が参照するDataFrameの部分を示す図です。

また、PandasがNumPyの使い方を踏襲していることを覚えておくと便利です。 axis . この使い方は、NumPyの 用語集 :

<ブロッククオート

軸は2次元以上の配列に対して定義されます。2次元の配列は2つの軸を持ちます。 行を越えて下向きに走るもの (軸 0) であり、2番目の軸は は列を水平に横切る (軸 1) . [ 私の強調 ]

では、質問のメソッドに関して。 df.mean(axis=1) は正しく定義されているようです。それはエントリの平均を取る 列を横切る つまり、個々の行に沿ったエントリーの平均を取ります。一方 df.mean(axis=0) は垂直に作用する操作となります 行をまたいで下向きに作用する操作です。 .

同様に df.drop(name, axis=1) は、直感的に水平軸を横切るので、列ラベルに対するアクションを指します。指定する axis=0 を指定すると、メソッドは代わりに行で動作するようになります。