Pandasデータフレームの1つ以上の列のデータ型を変換する方法
データ分析を行う際、計算処理の要件に合わせて、Pandasデータフレーム内の1つ以上の列のデータ型を変更する必要がある場面は少なくありません。幸い、Pandasにはこの目的を達成するための組み込み関数やメソッドがいくつか用意されています。
本記事では、代表的な3つの方法「astype()」「to_numeric()」「infer_objects()」について、具体的なコード例とともに解説します。
astype()を使った変換
astype()メソッドを使用すると、既存の特定の列、あるいはデータフレーム全体のすべての列に対して、新しいデータ型を適用できます。以下の例では、すべての既存の列を文字列(str)型に変換しています。
コード例
import pandas as pd
# サンプルデータフレーム
df = pd.DataFrame({
'DayNo': [1, 2, 3, 4, 5,6,7],
'Name': ['Sun', 'Mon', 'Tue', 'Wed', 'Thu','Fri','Sat'],
'Qty': [2.6, 5, 11.8, 2, 5.6,0,0.25]})
# 現在のデータ型を確認
print(df.dtypes)
# 文字列型に変換
df_str = df.astype(str)
# 変換結果を確認
print("***After Conversion***")
print(df_str.dtypes)
実行結果
上記のコードを実行すると、次のような出力が得られます。
DayNo int64 Name object Qty float64 dtype: object ***After Conversion*** DayNo object Name object Qty object dtype: object
変換後、すべての列が object 型(文字列)になっていることが確認できます。
to_numeric()を使った数値への変換
pd.to_numeric()関数を使用すると、データフレーム内で文字列として格納されている数値を、実際の数値型に変換できます。外部ファイルから読み込んだデータが意図せず文字列型になっている場合などに特に便利です。
コード例
import pandas as pd
# サンプルデータフレーム
df = pd.DataFrame({
'DayNo': [1, 2, 3, 4, 5,6,7],
'Name': ['Sun', 'Mon', 'Tue', 'Wed', 'Thu','Fri','Sat'],
'Qty': [2.6, 5, 11.8, 2, 5.6,0,0.25]})
df_str = df.astype(str)
print(df_str.dtypes)
# 数値型へ変換
print("After Conversion:")
df_num = pd.to_numeric(df_str.DayNo)
print('DayNo:',df_num.dtypes)
実行結果
DayNo object Name object Qty object dtype: object After Conversion: DayNo: int64
文字列型になっていた DayNo 列が、int64 型に正しく変換されました。
infer_objects()を使った自動推論変換
infer_objects()は「ソフト変換(soft conversion)」と呼ばれる手法です。データフレーム内の object 型の列を走査し、実際の内容に基づいてより具体的なデータ型(整数型や浮動小数点型など)へと自動的に推論・変換します。
コード例
import pandas as pd
# サンプルデータフレーム(すべてobject型として作成)
df = pd.DataFrame({
'DayNo': [1, 2, 3, 4, 5,6,7],
# 'Name': ['Sun', 'Mon', 'Tue', 'Wed', 'Thu','Fri','Sat'],
'Qty': ['2.6', '5', '11.8', '2', '5.6','0','0.25']}, dtype='object')
print(df.dtypes)
# 推論による変換を適用
print("After Conversion:")
df_new = df.infer_objects()
print(df_new.dtypes)
実行結果
DayNo object Qty object dtype: object After Conversion: DayNo int64 Qty object dtype: object
この例では、整数値を含む DayNo 列は int64 型に変換されましたが、Qty 列は文字列形式の数値が混在しているため object 型のままです。このような場合は、pd.to_numeric() を併用すると確実に数値型へ変換できます。
まとめ
- astype(): 特定のデータ型へ明示的に一括変換したい場合に使用
- to_numeric(): 文字列として格納された数値を数値型へ変換したい場合に使用
- infer_objects(): object型の列の内容から適切な型を自動的に推論させたい場合に使用
これらのメソッドを使い分けることで、データ前処理の効率と精度を大幅に向上させることができます。
-
Python・Pandas DataFrameで散布図を描画する方法
散布図(Scatter Plot)は、2つの変数の関係を視覚的に把握するための代表的なデータ可視化手法です。Pandasでは plot.scatter() メソッドを使うことで、DataFrameのデータから簡単に散布図を作成できます。この記事では、チームごとのランキングポイントデータを例に、Pandas DataFrameから散布図を描画する手順を解説します。必要なライブラリのインポートまず、必要なライブラリをインポートします。データ操作には pandas、グラフの表示には matplotlib を使用します。import pandas as pd import matplotlib.pyp
-
Python PandasでDataFrameの複数のデータ列をプロットする方法
PythonのPandasライブラリを使えば、DataFrameに含まれる複数のデータ列を簡単に可視化できます。本記事では、plot()メソッドを使用し、kindパラメータをbarに設定することで、複数の列を1つの棒グラフとして描画する方法を解説します。必要なライブラリのインポートまず、PandasとMatplotlibという2つの必須ライブラリをインポートします。Pandasはデータ操作を、Matplotlibはグラフの表示を担当します。import pandas as pd import matplotlib.pyplot as mpサンプルデータの準備ここでは、各チームのランキングポイン