Python in Excelの「相関マトリックスを作成する」サンプルでは、アヤメの花びらの長さと幅、がくの長さと幅の相関マトリックスが作成されます。
このサンプルを操作していて、Python in Excelを使う上で注意が必要だと実感したので記事にしておきます。
Python in ExcelではDataFrame.corrの引数を省略してもOK
Python in Excelの「相関マトリックスを作成する」サンプルの、[サンプルを挿入する]ボタンをクリックすると、以下のようなPythonのコードが作成されます。
sample_df = xl("IrisDataSet2[#すべて]", headers=True)
sample_df.corr(numeric_only=True)
pandasのDataFrame.corrメソッドを呼び出して、相関マトリックスを作成しているコードです。
2023年10月時点のPython in Excelでは、上記のコードからDataFrame.corrメソッドの引数を削除した、以下のようなコードでも相関マトリックスが作成されます。
sample_df = xl("IrisDataSet2[#すべて]", headers=True)
sample_df.corr()
ローカルでDataFrame.corrの引数を省略するとValueErrorに
ところが私のローカル環境で、ほぼ同等の以下のコードを実行すると、
import seaborn as sns
df = sns.load_dataset('iris')
df.corr()
エラーが発生します。
ValueError: could not convert string to float: 'setosa'
string型のデータである「setosa」を、float型に変換できないといったValueErrorです。
もちろん、DataFrame.corrメソッドの引数numeric_onlyにTrueを指定した以下のコードならば、
sample_df = xl("IrisDataSet2[#すべて]", headers=True)
sample_df.corr(numeric_only=True)
相関マトリックスが出力されます。
Python in Excelのpandasはバージョン1.5.3
この挙動の違いは、pandasのバージョンの違いによります。
私のローカル環境の場合、pandasのバージョンは「2.0.3」です。
それに対し、2023年10月時点でPython in Excelのpandasのバージョンは、「pd.__version__」で確認すると下図のとおり「1.5.3」です。
そして厄介なことに、pandasのDataFrame.corrメソッドは、バージョン2.0.0のときに仕様が変更になっています。
公式ドキュメントに、以下の記述があります。
numeric_only: bool, default False
(途中省略)
Changed in version 2.0.0: The default value of numeric_only is now False.
1.5.xの公式ドキュメントではDataFrame.cooメソッドの引数numeric_onlyには以下のように書かれています。
numeric_only: bool, default True
(途中省略)
Deprecated since version 1.5.0: The default value of numeric_only will be False in a future version of pandas.
pandasのバージョン2.0.0からDataFrame.corrメソッドの仕様が変更になり、現在では引数numeric_onlyはデフォルトでFalseになっています。
そのため、私のローカル環境では「numeric_only=True」を明記しないとエラーが発生し、Python in Excelでは引数「numeric_only=True」を削除しても、相関マトリックスを作成できてしまいます。
Python in Excelでは、どのライブラリであっても、最新版より少し前のバージョンが使うことになるでしょうから、このようなバージョンの違いをしっかり意識しておく必要があるということです。
Home » Python » Python in Excelの使い方 » 2023年10月時点でPython in Excelのpandasのバージョンは1.5.3