Python
 Computer >> コンピューター >  >> プログラミング >> Python

【Python】pandasでデータフレーム内の特定の列のデータ型を変換する方法

はじめに

pandasでデータフレームを扱っていると、「float型の列をint型に変換したい」という場面によく出会います。例えば、成績データの平均値(小数点あり)を整数として扱いたい場合などがその一例です。

この記事では、astype()メソッドを使って、データフレーム内の特定の列のデータ型を変換する方法を、具体的なサンプルコードとともに解説します。


変換前後のイメージ

float型からint型へ変換すると、データフレームの各列の型は次のように変わります。

【変換前】
Name      object
Age        int64
Maths      int64
Science    int64
English    int64
Result   float64
dtype: object

【変換後】
Name      object
Age       int64
Maths     int64
Science   int64
English   int64
Result    int64
dtype: object

ご覧のとおり、Result列だけがfloat64からint64に変換され、他の列は元のまま維持されています。

解決手順

  • まず、サンプルとなるデータフレームを定義します。
  • 次に、df['Result'].astype(int) を使って、float型の「Result」列をint型に変換します。

変換のコード自体は非常にシンプルで、たった1行で完了します。

df.Result = df.Result.astype(int)

実装例

実際のコード全体を見てみましょう。生徒5人分の名前・年齢・各科目の点数・結果(小数)を含むデータフレームを作成し、Result列の型を変換しています。

import pandas as pd

data = {'Name': ['David', 'Adam', 'Bob', 'Alex', 'Serina'],
        'Age' : [13, 12, 12, 13, 12],
        'Maths': [98, 59, 66, 95, 70],
        'Science': [75, 96, 55, 49, 78],
        'English': [79, 45, 70, 60, 80],
        'Result': [8.1, 6.2, 6.3, 7.2, 8.3]}

df = pd.DataFrame(data)
print("Before conversion\n", df.dtypes)

df.Result = df.Result.astype(int)

print("After conversion\n", df.dtypes)

実行結果

上記のコードを実行すると、以下のような出力が得られます。

Before conversion
 Name      object
Age       int64
Maths     int64
Science   int64
English   int64
Result    float64
dtype: object
After conversion
 Name      object
Age       int64
Maths     int64
Science   int64
English   int64
Result    int64
dtype: object

補足ポイント

  • astype(int)による変換では、小数部分は切り捨てられます(例:8.1 → 8)。四捨五入したい場合は、事前にround()を組み合わせましょう。
  • 変換対象の列に欠損値(NaN)が含まれている場合、int型への直接変換はエラーになります。その場合はInt64(nullableな整数型)や、欠損値処理を先に行う必要があります。

まとめ

特定の列のデータ型を変換したい場合は、astype()メソッドが最も手軽な方法です。1行のコードでfloat型からint型へ安全に変換できるため、データ前処理の場面でぜひ活用してください。

  1. 【Python入門】DataFrame内の20〜30歳の人数をカウントする方法

    はじめにデータ分析の現場では、「特定の年齢層に該当するレコードは何件あるのか」を集計したい場面がよくあります。本記事では、pandasのbetween()メソッドを使って、DataFrame内の20〜30歳の人数をカウントするPythonプログラムを解説します。入力データ以下のようなDataFrameを想定します。 Id Age 0 1 21 1 2 23 2 3 32 3 4 35 4 5 18出力結果20〜30歳の合計人数は 2 人です。解決の手順この課題は、以下のステップで解決できます。DataFrameを定義するAge列が20〜30の範囲にある行だけを抽出し、結果を新しいDa

  2. PythonでDataFrameから成績が「A」の生徒の名前を抽出する方法

    pandasのDataFrameから特定の条件に一致する行だけを取り出すことは、データ分析における最も基本的な操作の一つです。この記事では、「Id」「Name」「Grade」の3列を持つ生徒データのDataFrameから、成績(Grade)が「A」の生徒の名前のみを抽出するプログラムを、ブールインデックス参照を使って実装する方法を解説します。 入力データと期待される出力 まず、以下のようなDataFrameを想定します。 Id Name Grade 0 1 stud1 A 1 2 stud2 B 2 3 stud3 C 3 4 stud