Pandasデータ型(dtype)徹底解説:一覧からastypeでの変換まで

フリーランスボード

20万件以上の案件から、副業に最適なリモート・週3〜の案件を一括検索できるプラットフォーム。プロフィール登録でAIスカウトが自動的にマッチング案件を提案。市場統計や単価相場、エージェントの口コミも無料で閲覧可能なため、本業を続けながら効率的に高単価の副業案件を探せます。フリーランスボード

ITプロパートナーズ

週2〜3日から働ける柔軟な案件が業界トップクラスの豊富さを誇るフリーランスエージェント。エンド直契約のため高単価で、週3日稼働でも十分な報酬を得られます。リモートや時間フレキシブルな案件も多数。スタートアップ・ベンチャー中心で、トレンド技術を使った魅力的な案件が揃っています。専属エージェントが案件紹介から契約交渉までサポート。利用企業2,000社以上の実績。ITプロパートナーズ

Midworks 10,000件以上の案件を保有し、週3日〜・フルリモートなど柔軟な働き方に対応。高単価案件が豊富で、報酬保障制度(60%)や保険料負担(50%)など正社員並みの手厚い福利厚生が特徴。通勤交通費(月3万円)、スキルアップ費用(月1万円)の支給に加え、リロクラブ・freeeが無料利用可能。非公開案件80%以上、支払いサイト20日で安心して稼働できます。Midworks

Pandasでデータ分析を行う上で、**データ型(dtype)**の理解は非常に重要です。なぜなら、データ型が適切でないと、数値計算が正しく行われなかったり、メモリが無駄に消費されたり、予期せぬエラーが発生したりするからです。特に、異なるデータ型間で変換(キャスト)を行うastypeメソッドは、データ前処理の必須テクニックと言えるでしょう。

この記事では、Pandasの主要なデータ型を一覧で紹介し、さらにastypeを使ってデータ型を柔軟に変換する方法について、具体的なコード例を交えながら詳しく解説します。

Pandasのデータ型(dtype)とは?

PandasのDataFrameSeriesの各列(または要素)には、それぞれデータ型が割り当てられています。これは、Pythonの組み込み型(int, float, str, boolなど)とNumPyのデータ型をベースにしています。データ型は、データがどのようにメモリに格納され、どのような操作が可能かを定義します。

主要なPandasデータ型一覧

データ型(dtype) 説明
int64 整数(符号付き64ビット整数) 1, 100, -5
float64 浮動小数点数(64ビット浮動小数点数) 1.0, 3.14, -0.5
object 文字列または混合型(Pythonオブジェクト) 'text', 'hello world', ['a', 'b']
bool ブール値(真偽値) True, False
datetime64[ns] 日時データ(ナノ秒単位) '2023-01-01', '2023-01-01 10:30:00'
category カテゴリ型(重複の少ない文字列データに最適) 'Male', 'Female', 'Other'
timedelta64[ns] 時間差データ(ナノ秒単位) '1 day', '0 days 00:01:00'

データ型の確認方法

DataFrameの各列のデータ型を確認するには、.dtypes属性を使用します。

Python
 
import pandas as pd

df = pd.DataFrame({
    'ID': [1, 2, 3],
    'Name': ['Alice', 'Bob', 'Charlie'],
    'Score': [85.5, 92.0, 78.3],
    'Is_Active': [True, False, True],
    'Date': pd.to_datetime(['2023-01-01', '2023-01-02', '2023-01-03'])
})

print(df.dtypes)
# 出力例:
# ID             int64
# Name          object
# Score        float64
# Is_Active       bool
# Date    datetime64[ns]
# dtype: object

astypeによるデータ型変換(キャスト)の基本 🔄

astype()メソッドは、DataFrameの列やSeriesのデータ型を別の型に変換するために使われます。これは、データクレンジングや特定の操作(例: 数値計算)を実行する際に非常に役立ちます。

astype()の基本的な使い方

astype()メソッドは、変換したいデータ型を引数に取ります。

Python
 
import pandas as pd

df = pd.DataFrame({
    'A': ['1', '2', '3'],
    'B': [10.5, 20.0, 30.5],
    'C': ['True', 'False', 'True']
})

print("--- 変換前 ---")
print(df.dtypes)

# 'A'列を整数型(int64)に変換
df['A'] = df['A'].astype('int64')

# 'B'列を整数型(int64)に変換 (小数点以下は切り捨て)
df['B'] = df['B'].astype('int64')

# 'C'列をブール型(bool)に変換
df['C'] = df['C'].astype('bool')

print("\n--- 変換後 ---")
print(df.dtypes)
# 出力例:
# --- 変換前 ---
# A     object
# B    float64
# C     object
# dtype: object

# --- 変換後 ---
# A      int64
# B      int64
# C       bool
# dtype: object

よくあるデータ型変換の例と注意点 ⚠️

1. 文字列(object)から数値型へ

数値に見える文字列がobject型になっている場合、intfloatに変換することで数値計算が可能になります。

Python
 
import pandas as pd

df_str_num = pd.DataFrame({'price': ['100', '200', '300.5']})

# price列をfloat型に変換
df_str_num['price'] = df_str_num['price'].astype('float64')
print(df_str_num.dtypes)
# 出力例: price    float64

注意点: 変換できない値(例: 'abc')が含まれている場合、エラーが発生します。これを避けるには、pd.to_numeric()errors='coerce'オプションが便利です。

Python
 
import pandas as pd
import numpy as np

df_mixed = pd.DataFrame({'value': ['10', '20', 'invalid', '30']})

# 無効な値をNaNに変換しながら数値型に変換
df_mixed['value'] = pd.to_numeric(df_mixed['value'], errors='coerce')
print(df_mixed)
print(df_mixed.dtypes)
# 出力例:
#    value
# 0   10.0
# 1   20.0
# 2    NaN
# 3   30.0
# value    float64
# dtype: object

2. 数値型から文字列(object)へ

数値を文字列として扱いたい場合に変換します。

Python
 
import pandas as pd

df_num_str = pd.DataFrame({'id': [101, 102, 103]})

# id列をobject型(文字列)に変換
df_num_str['id'] = df_num_str['id'].astype('object')
print(df_num_str.dtypes)
# 出力例: id    object

3. 日付・時刻型(datetime64[ns])へ

日付や時刻を表す文字列をdatetime型に変換することで、日時計算やフィルタリングが可能になります。pd.to_datetime()が推奨されますが、astypeも使えます。

Python
 
import pandas as pd

df_date = pd.DataFrame({'event_date': ['2023-01-01', '2023-02-15']})

# event_date列をdatetime型に変換
df_date['event_date'] = pd.to_datetime(df_date['event_date']) # こちらが推奨
# df_date['event_date'] = df_date['event_date'].astype('datetime64[ns]') # astypeでも可能
print(df_date.dtypes)
# 出力例: event_date    datetime64[ns]

4. カテゴリ型(category)への変換

重複する文字列が多い列(例: 性別、地域)をcategory型に変換すると、メモリ使用量を削減し、一部の操作でパフォーマンスが向上します。

Python
 
import pandas as pd

df_gender = pd.DataFrame({'gender': ['Male', 'Female', 'Male', 'Female', 'Male']})

print("--- 変換前 ---")
print(df_gender.dtypes)

# gender列をcategory型に変換
df_gender['gender'] = df_gender['gender'].astype('category')

print("\n--- 変換後 ---")
print(df_gender.dtypes)
# 出力例:
# --- 変換前 ---
# gender    object
# dtype: object

# --- 変換後 ---
# gender    category
# dtype: category

まとめ

Pandasの**データ型(dtype)**を理解し、astype()メソッドを使いこなすことは、効率的かつ正確なデータ分析を行う上で不可欠です。適切なデータ型を選択・変換することで、メモリの最適化、計算の高速化、そして何よりもデータの整合性を保つことができます。

データ前処理の際には、まずdf.dtypesでデータ型を確認し、必要に応じてastype()pd.to_numeric()pd.to_datetime()などを活用して、最適なデータ型に変換する習慣をつけましょう。これにより、よりスムーズで信頼性の高いデータ分析が可能になります。

フリーランスボード

20万件以上の案件から、副業に最適なリモート・週3〜の案件を一括検索できるプラットフォーム。プロフィール登録でAIスカウトが自動的にマッチング案件を提案。市場統計や単価相場、エージェントの口コミも無料で閲覧可能なため、本業を続けながら効率的に高単価の副業案件を探せます。フリーランスボード

ITプロパートナーズ

週2〜3日から働ける柔軟な案件が業界トップクラスの豊富さを誇るフリーランスエージェント。エンド直契約のため高単価で、週3日稼働でも十分な報酬を得られます。リモートや時間フレキシブルな案件も多数。スタートアップ・ベンチャー中心で、トレンド技術を使った魅力的な案件が揃っています。専属エージェントが案件紹介から契約交渉までサポート。利用企業2,000社以上の実績。ITプロパートナーズ

Midworks 10,000件以上の案件を保有し、週3日〜・フルリモートなど柔軟な働き方に対応。高単価案件が豊富で、報酬保障制度(60%)や保険料負担(50%)など正社員並みの手厚い福利厚生が特徴。通勤交通費(月3万円)、スキルアップ費用(月1万円)の支給に加え、リロクラブ・freeeが無料利用可能。非公開案件80%以上、支払いサイト20日で安心して稼働できます。Midworks