Skip to content

toona note

pandas への ndarray 代入時の注意すべき挙動

はじめに

pandas DataFrame に形状が一致していない numpy ndarray を代入すると、直観的にはエラーが発生するように思います。
しかし、DataFrame の 1 列(Series)を指定して代入する場合はエラーしません。
この挙動は直観に反するように感じます。
注意が必要です。

問題のコード

説明

コードでは 6 * 2 の DataFrame と、 6 * 3 の array を作りました。
これらは行数は一致していますが、列数は一致していません。

27 行目で、DataFrame の B 列に array を割り当てています。
この時、array の 1 列目が割り当てられます。
列数が異なる処理を行っているので、エラーが出そうに感じますが、1 列目が自動的に割り当てられる挙動に注意が必要です。

では複数列ではどうなるでしょうか?
2 列に値を割り当てようとしたのが 40 行目です。
「Columns must be same length as key」つまり、列数が異なるという内容のエラーが出ます。
先の挙動と合わせると、ndarray の先頭から 2 列が自動的に DataFrame へ割り当てられそうに感じますが、実際の挙動は異なりました。
このように、直観と異なる挙動となるので注意が必要です。

動作環境

  • python: 3.8.11
  • pandas: 1.3.1