TypeError: Python でシリーズを <Class 'Float'> に変換できません

Salman Mehmood 2023年6月21日
TypeError: Python でシリーズを <Class 'Float'> に変換できません

この説明で、TypeError: 系列を <class 'float'> に変換できません というエラーが発生する理由を学習します。 また、それを修正し、Python で Pandas シリーズのデータ型を変更する方法も学びます。

Python で Pandas シリーズのデータ型をエラーなしで変換する

データセットの例を見てみましょう。 Pandas ライブラリをインポートしてから、データ セットをインポートします。 国別のアルコール消費量から始めます。

Alcohol という変数を宣言し、http://bit.ly/drinksbycountry から CSV ファイルを読み取ります。

次のコードを実行した後、head() を見ると、6 列と 4 行の数値が表示されます。

import pandas as pd

Alcohol = pd.read_csv("http://bit.ly/drinksbycountry")
Alcohol.head()

出力:

python typeerror はシリーズをクラス float に変換できません - データセット

これらの列のデータ型を見てみましょう。 Alcohol データ フレームの dtypes 属性を使用して、データ型を見つけます。

Alcohol.dtypes

ここで、3つの列が整数列で、1つの浮動小数点列があり、2つの列がオブジェクトであることがわかります。これは、countrycontinent が単なる文字列であることを意味します。

出力:

列のデータ型

spirit_servings 列を整数ではなく浮動小数点に変換したいとします。 系列メソッド astype() を使用して float を渡すだけです。これは、浮動小数点型に変換することを意味します。

データ フレームを変更する場合は、新しい列を追加するか、既存の spirit_servings 列を上書きできます。 dtypes を定義して列のデータ型をチェックすると、それが変更されていることがわかり、spirit_servings は浮動小数点列になりました。

Alcohol["spirit_servings"] = Alcohol.spirit_servings.astype(float)
Alcohol.dtypes

出力:

astype() を使用して Spirit_Servings 列を変換する

今、あなたはそれが何の役に立つのか疑問に思うかもしれません。 これは通常、数値が文字列として格納されているデータ ファイルがあり、それを Pandas 文字列に読み込んだが、それらに対して数学を実行したい場合に行います。

列で数学を実行するには、数値型である必要があるため、列の型は、より一般的なユースケースである float にする必要があります。 float 型に変換しないと、TypeError: cannot convert the series to <class 'float'> のようなエラーが発生します。

もう 1つの疑問が生じます。実際に CSV ファイルを読み取る前に、どのようにして各列の型を見つけたのでしょうか? ここで、CSV 読み取りプロセス中にデータ型を変更します。 もう 1つのパラメータ dtype を追加する必要があります。

それを辞書に渡します。 辞書のキーは spirit_servings で、辞書の値は float です。 ここで、この列のデータ型を確認すると、再び spirit_servings が浮動小数点に変換されていることがわかります。

Alcohol = pd.read_csv(
    "http://bit.ly/drinksbycountry", dtype={"spirit_servings": "float"}
)
Alcohol.dtypes

出力:

dtypeを使用してSpirit_Servings列を変換

これと上記の唯一の違いは、このメソッドが読み取りプロセス中にそれを行うことです。 上記では、データ フレームが既に作成された後に変換しました。

Python で Pandas シリーズのデータ型をエラーなしで変換する別の例

ここで、もう 1つのデータ セットと、チップ注文データを使用した別の例を示します。

CHIP_ORDERS = pd.read_table("http://bit.ly/chiporders")
CHIP_ORDERS.head()

コラムを見てみましょう。 item_price 列に注目したいと思います。

チップ注文データ

CHIP_ORDERS.dtypes

Pandas は item_price 列をオブジェクト、つまり文字列として保存しています。これは、これらが数値であることを理解していないためです。

チップ注文列のデータ型

それを使って数学を行うには、$ 記号のような文字列から文字を削除する必要があります。 str および replace() メソッドを使用してドル記号を何も置き換えませんが、それだけでは十分ではありません。 シリーズに数学演算を適用しようとすると、エラーが発生します。

CHIP_ORDERS.item_price.str.replace("$", "").mean()

出力:

ValueError: could not convert string to float: '2.39 3.39 3.39...

これは、ドル記号を削除しても文字列のままであるため、float に型キャストする必要があるためです。 float に型キャストした後、数学演算を行うことができます。

CHIP_ORDERS.item_price.str.replace("$", "").astype(float).mean()

出力:

astypeを使用してフロートに型キャスト

著者: Salman Mehmood
Salman Mehmood avatar Salman Mehmood avatar

Hello! I am Salman Bin Mehmood(Baum), a software developer and I help organizations, address complex problems. My expertise lies within back-end, data science and machine learning. I am a lifelong learner, currently working on metaverse, and enrolled in a course building an AI application with python. I love solving problems and developing bug-free software for people. I write content related to python and hot Technologies.

LinkedIn

関連記事 - Python Error