AttributeError: 'float' object has no attribute 'round'を解決するには?Python初心者の勉強

AttributeError: 'float' object has no attribute 'round'というエラーが発生しました。

AttributeError: 'float' object has no attribute 'round'の意味

AttributeError: 'float' object has no attribute 'round'を直訳すると以下のようになります。

属性エラー:フロートオブジェクトはラウンド属性を持っていません。

ふーん。なんで?

問題が起きているコード

問題が起きているコードを再現するにはAPIの戻り値を使わないといけないので実際に実行してもエラーにならないのですがこんな感じのコードでした。

import pandas as pd

df = pd.DataFrame([[61, 20,30, 30], [33, 50,65, 80],[10, 50,65, 80],[13, 50,65, 80],[9, 50,65, 80],[41, 50,65, 80]], columns=["A", "B", "C", "D"])

print(df["A"].mean()) # 27.833333333333332

print(df["A"].mean().round(0)) # エラー (エラー再現せず)

なんでフロートの値をオブジェクトとして認識しているのかprintするとフロートの値にしか見えないのにround()で四捨五入してくれないのか本当に謎です。

解決コード

なぜエラーが起きていたのかはよくわからないけれど以下のように書き換えると治ると言っている人がいたので試してみたらエラーが解消しました。

import pandas as pd

df = pd.DataFrame([[61, 20,30, 30], [33, 50,65, 80],[10, 50,65, 80],[13, 50,65, 80],[9, 50,65, 80],[41, 50,65, 80]], columns=["A", "B", "C", "D"])

print(df["A"].mean()) # 27.833333333333332

print(round(df["A"].mean(), 0)) # エラー解消

問題の部分だけ書くとこんな感じです。

# この書き方はNG
df["A"].mean().round(0)

# この書き方はOK
round(df["A"].mean(), 0)

何が違うかはわかりませんが、何かが違うんでしょうね。

おわり

Pythonの予備知識をつけないといつか超えられない壁にぶち当たりそうです。エラーもまだまだ見慣れないものばかりです。

参考元

AttributeError: ‘float’ object has no attribute ’round’

Python

Posted by Nakamoto