Pandasデータ型(dtype)徹底解説:一覧からastypeでの変換まで
![]() |
20万件以上の案件から、副業に最適なリモート・週3〜の案件を一括検索できるプラットフォーム。プロフィール登録でAIスカウトが自動的にマッチング案件を提案。市場統計や単価相場、エージェントの口コミも無料で閲覧可能なため、本業を続けながら効率的に高単価の副業案件を探せます。フリーランスボード |
| |
週2〜3日から働ける柔軟な案件が業界トップクラスの豊富さを誇るフリーランスエージェント。エンド直契約のため高単価で、週3日稼働でも十分な報酬を得られます。リモートや時間フレキシブルな案件も多数。スタートアップ・ベンチャー中心で、トレンド技術を使った魅力的な案件が揃っています。専属エージェントが案件紹介から契約交渉までサポート。利用企業2,000社以上の実績。ITプロパートナーズ |
| |
10,000件以上の案件を保有し、週3日〜・フルリモートなど柔軟な働き方に対応。高単価案件が豊富で、報酬保障制度(60%)や保険料負担(50%)など正社員並みの手厚い福利厚生が特徴。通勤交通費(月3万円)、スキルアップ費用(月1万円)の支給に加え、リロクラブ・freeeが無料利用可能。非公開案件80%以上、支払いサイト20日で安心して稼働できます。Midworks |
Pandasでデータ分析を行う上で、**データ型(dtype)**の理解は非常に重要です。なぜなら、データ型が適切でないと、数値計算が正しく行われなかったり、メモリが無駄に消費されたり、予期せぬエラーが発生したりするからです。特に、異なるデータ型間で変換(キャスト)を行うastypeメソッドは、データ前処理の必須テクニックと言えるでしょう。
この記事では、Pandasの主要なデータ型を一覧で紹介し、さらにastypeを使ってデータ型を柔軟に変換する方法について、具体的なコード例を交えながら詳しく解説します。
目次
Pandasのデータ型(dtype)とは?
PandasのDataFrameやSeriesの各列(または要素)には、それぞれデータ型が割り当てられています。これは、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属性を使用します。
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()メソッドは、変換したいデータ型を引数に取ります。
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型になっている場合、intやfloatに変換することで数値計算が可能になります。
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'オプションが便利です。
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)へ
数値を文字列として扱いたい場合に変換します。
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も使えます。
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型に変換すると、メモリ使用量を削減し、一部の操作でパフォーマンスが向上します。
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スカウトが自動的にマッチング案件を提案。市場統計や単価相場、エージェントの口コミも無料で閲覧可能なため、本業を続けながら効率的に高単価の副業案件を探せます。フリーランスボード |
| |
週2〜3日から働ける柔軟な案件が業界トップクラスの豊富さを誇るフリーランスエージェント。エンド直契約のため高単価で、週3日稼働でも十分な報酬を得られます。リモートや時間フレキシブルな案件も多数。スタートアップ・ベンチャー中心で、トレンド技術を使った魅力的な案件が揃っています。専属エージェントが案件紹介から契約交渉までサポート。利用企業2,000社以上の実績。ITプロパートナーズ |
| |
10,000件以上の案件を保有し、週3日〜・フルリモートなど柔軟な働き方に対応。高単価案件が豊富で、報酬保障制度(60%)や保険料負担(50%)など正社員並みの手厚い福利厚生が特徴。通勤交通費(月3万円)、スキルアップ費用(月1万円)の支給に加え、リロクラブ・freeeが無料利用可能。非公開案件80%以上、支払いサイト20日で安心して稼働できます。Midworks |


