『書籍のエラー対策』 Pythonのpandasライブラリでデータフレーム変数のメソッドstd()を実行する際、「TypeError: could not convert string to float:…」が表示される

インプレスの「スッキリわかる Pythonによる機械学習入門」のエラー対策記事です。

書籍に記述されているコードを間違いなく入力してもエラーが発生した箇所があったので対策方法を掲載します。

エラーの要因として、書籍が出版された後も実行環境が更新されることから、執筆時点では問題なかったものが残念ながら読者が実行するときにはエラーとなるケースがあります。

エラーが解決できず モヤモヤ している人に役立てば幸いです。

エラー内容

P.152 第Ⅱ部 第5章 「分類1:アヤメの判別」 – 5.2.6 データの前処理 / 標準偏差の計算のコード5-15 stdメソッドで各列の標準偏差を計算

# 各列の標準偏差
df.std()

を実行すると

ValueError
…
TypeError: could not convert string to float: 'Iris-setosa'

とエラーが表示されます。

実行環境

エラーは、下記の環境で発生を確認しています。

  • Anaconda3-2024.10-1-Windows-x86_64
  • JupyterLab 4.2.5
  • Python 3.12.7
  • pandas 2.2.3

エラーの原因

データフレームのstdメソッドに対するnumeric_only引数のデフォルトがFalseになっている為です。
‘種類’列のデータは文字列なので、文字列を浮動小数点(float)に変換できずエラーとなっています。

# df.std() と記述した場合
df.std(numeric_only=False)
# となる

解決方法

期待結果としては「文字列の列は除外」なのでnumeric_onlyをTrueにすることで解決します。

df.std(numeric_only=True)

pandas 1.5.2 の API referenceには、
Deprecated since version 1.5.0: Specifying numeric_only=None is deprecated.
The default value will be False in a future version on pandas.
(「numeric_only=None」を指定することは、バージョン1.5.0以降では非推奨となっています。将来のバージョンではデフォルト値はFalseになります。)
と記載されており、pandas 2.0.3ではnumeric_onlyのデフォルトはFalseになっています。

コメント

タイトルとURLをコピーしました