【Pandas初心者向け】データ型チェックの救世主!`is_int64_dtype` 関数の使い方とサンプルコード


用途

  • データ可視化: データ型によって適切な可視化方法が異なるため、is_int64_dtype を使ってデータ型を判別し、適切な可視化を選択できます。
  • データ変換: 整数型以外のデータ型を int64 型に変換する必要がある場合に、事前に型チェックを行って効率化できます。
  • データ型チェック: データ分析の前処理として、データ型が適切かどうかを確認する際に役立ちます。

使い方

import pandas as pd

# データフレームを作成
df = pd.DataFrame({'a': [1, 2, 3], 'b': ['4', '5', '6']})

# 列 'a' のデータ型が int64 型かどうかを判定
print(pd.api.types.is_int64_dtype(df['a']))  # True

# 列 'b' のデータ型が int64 型かどうかを判定
print(pd.api.types.is_int64_dtype(df['b']))  # False
  • システムアーキテクチャによって、is_int64_dtype(int) の結果は異なります。64ビット整数を使用するOSでは True、32ビット整数を使用するOSでは False となります。
  • is_int64_dtype は、Pandas v2.1.0 以降で非推奨となり、将来的には削除される予定です。代わりに、dtype == np.int64 を使用するように推奨されています。


例 1:データ型チェックとデータ変換

import pandas as pd

# データフレームを作成
df = pd.DataFrame({'a': [1, 2, 3], 'b': ['4', '5', '6']})

# 列 'a' のデータ型が int64 型かどうかを判定し、int64 型に変換
if not pd.api.types.is_int64_dtype(df['a']):
    df['a'] = df['a'].astype(np.int64)

# 列 'b' のデータ型が int64 型かどうかを判定し、int64 型に変換
if not pd.api.types.is_int64_dtype(df['b']):
    try:
        df['b'] = df['b'].astype(np.int64)
    except:
        print('列 "b" の値は整数に変換できません。')

# データ型変換後のデータフレームを確認
print(df)

例 2:データ型ごとの処理

import pandas as pd

# データフレームを作成
df = pd.DataFrame({'a': [1, 2, 3], 'b': ['4', '5', '6']})

# 列 'a' のデータ型ごとに処理を実行
if pd.api.types.is_int64_dtype(df['a']):
    # 整数列として処理
    print(df['a'].sum())
else:
    # 整数列ではない場合はエラーメッセージを出力
    print('列 "a" は整数列ではありません。')

# 列 'b' のデータ型ごとに処理を実行
if pd.api.types.is_int64_dtype(df['b']):
    # 整数列として処理
    print(df['b'].sum())
else:
    # 整数列に変換できる場合は変換して処理
    try:
        df['b'] = df['b'].astype(np.int64)
        print(df['b'].sum())
    except:
        # 整数列に変換できない場合はエラーメッセージを出力
        print('列 "b" の値は整数に変換できません。')
  • データ型ごとに適切な処理を実行することで、データ分析の効率化を図ることができます。
  • データ型変換ができない場合は、エラーメッセージを出力しています。
  • データ型が int64 型でない場合は、astype() メソッドを使って int64 型に変換しています。
  • 上記のコードでは、まず pandas.api.types.is_int64_dtype 関数を使って、各列のデータ型が int64 型かどうかを判定しています。


pandas.api.types.is_int64_dtype 関数は、Pandas v2.1.0 で非推奨となり、将来的には削除される予定です。

代替方法としては、以下の2つが推奨されています。

dtype == np.int64 を使用する

import numpy as np

# データフレームを作成
df = pd.DataFrame({'a': [1, 2, 3], 'b': ['4', '5', '6']})

# 列 'a' のデータ型が int64 型かどうかを判定
print(df['a'].dtype == np.int64)  # True

# 列 'b' のデータ型が int64 型かどうかを判定
print(df['b'].dtype == np.int64)  # False

pd.api.types.is_dtype_equal(df['a'], np.int64) を使用する

import pandas as pd
import numpy as np

# データフレームを作成
df = pd.DataFrame({'a': [1, 2, 3], 'b': ['4', '5', '6']})

# 列 'a' のデータ型が int64 型かどうかを判定
print(pd.api.types.is_dtype_equal(df['a'], np.int64))  # True

# 列 'b' のデータ型が int64 型かどうかを判定
print(pd.api.types.is_dtype_equal(df['b'], np.int64))  # False
  • pd.api.types.is_dtype_equal(df['a'], np.int64):
    • 利点:pandas モジュールだけで完結
    • 欠点:やや冗長な表記
  • dtype == np.int64:
    • 利点:シンプルで分かりやすい
    • 欠点:np モジュールのインポートが必要
  • 今後、Pandasのバージョンアップに伴い、is_int64_dtype 関数は完全に削除される可能性があります。そのため、上記2つの代替方法を早めに習得しておくことをお勧めします。
  • どちらの方法を使用しても、pandas.api.types.is_int64_dtype 関数と同じ結果を得ることができます。