Pandas は文字列を数値型に変換する

Suraj Joshi 2023年1月30日
  1. pandas.to_numeric() メソッド
  2. pandas.to_numeric() メソッドを用いて Pandas DataFrame の文字列値を数値型に変換する
  3. Pandas DataFrame の文字列の値を他の文字を含む数値型に変換する
Pandas は文字列を数値型に変換する

このチュートリアルでは、pandas.to_numeric() メソッドを使って Pandas DataFrame の文字列値を数値型に変換する方法を説明します。

import pandas as pd

items_df = pd.DataFrame(
    {
        "Id": [302, 504, 708, 103, 343, 565],
        "Name": ["Watch", "Camera", "Phone", "Shoes", "Laptop", "Bed"],
        "Cost": ["300", "400", "350", "100", "1000", "400"],
    }
)

print(items_df)

出力:

    Id    Name  Cost
0  302   Watch   300
1  504  Camera   400
2  708   Phone   350
3  103   Shoes   100
4  343  Laptop  1000
5  565     Bed   400

上記の例を使って、DataFrame の値を数値型に変換する方法を説明します。

pandas.to_numeric() メソッド

構文

pandas.to_numeric(arg, errors="raise", downcast=None)

引数 arg に渡された引数を数値型に変換します。デフォルトでは、argint64 または float64 に変換されています。downcast パラメータに値を設定することで、arg を他のデータ型に変換することができます。

pandas.to_numeric() メソッドを用いて Pandas DataFrame の文字列値を数値型に変換する

import pandas as pd

items_df = pd.DataFrame(
    {
        "Id": [302, 504, 708, 103, 343, 565],
        "Name": ["Watch", "Camera", "Phone", "Shoes", "Laptop", "Bed"],
        "Cost": ["300", "400", "350", "100", "1000", "400"],
    }
)

print("The items DataFrame is:")
print(items_df, "\n")

print("Datatype of Cost column before type conversion:")
print(items_df["Cost"].dtypes, "\n")

items_df["Cost"] = pd.to_numeric(items_df["Cost"])
print("Datatype of Cost column after type conversion:")
print(items_df["Cost"].dtypes)

出力:

The items DataFrame is:
    Id    Name  Cost
0  302   Watch   300
1  504  Camera   400
2  708   Phone   350
3  103   Shoes   100
4  343  Laptop  1000
5  565     Bed   400 

Datatype of Cost column before type conversion:
object 

Datatype of Cost column after type conversion:
int64

これは items_dfCost カラムのデータ型を object から int64 に変換します。

Pandas DataFrame の文字列の値を他の文字を含む数値型に変換する

ある文字を含む値を持つ数値型のカラムを変換したい場合、ValueError: Unable to parse string というエラーが発生します。このような場合は、数値以外の文字をすべて削除してから、型変換を実行できます。

import pandas as pd

items_df = pd.DataFrame(
    {
        "Id": [302, 504, 708, 103, 343, 565],
        "Name": ["Watch", "Camera", "Phone", "Shoes", "Laptop", "Bed"],
        "Cost": ["$300", "$400", "$350", "$100", "$1000", "$400"],
    }
)

print("The items DataFrame is:")
print(items_df, "\n")

print("Datatype of Cost column before type conversion:")
print(items_df["Cost"].dtypes, "\n")

items_df["Cost"] = pd.to_numeric(items_df["Cost"].str.replace("$", ""))
print("Datatype of Cost column after type conversion:")
print(items_df["Cost"].dtypes, "\n")

print("DataFrame after Type Conversion:")
print(items_df)

出力:

The items DataFrame is:
    Id    Name   Cost
0  302   Watch   $300
1  504  Camera   $400
2  708   Phone   $350
3  103   Shoes   $100
4  343  Laptop  $1000
5  565     Bed   $400 

Datatype of Cost column before type conversion:
object 

Datatype of Cost column after type conversion:
int64 

DataFrame after Type Conversion:
    Id    Name  Cost
0  302   Watch   300
1  504  Camera   400
2  708   Phone   350
3  103   Shoes   100
4  343  Laptop  1000
5  565     Bed   400

Cost カラムの値に添付されている $ 文字を削除し、pandas.to_numeric() メソッドを用いて数値型に変換します。

著者: Suraj Joshi
Suraj Joshi avatar Suraj Joshi avatar

Suraj Joshi is a backend software engineer at Matrice.ai.

LinkedIn

関連記事 - Pandas Data Type