【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型へ安全に変換できるため、データ前処理の場面でぜひ活用してください。
-
【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
-
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