Pandasは数値データを含むDataFrameで頻繁に使用される、強力なPythonデータ操作ライブラリです。よくあるタスクとして、浮動小数点数(float)の列を整数に変換することがあります。この記事では、Pandas DataFrame内でのこの変換の効率的な方法を詳細に説明し、それぞれの長所と短所を強調します。
目次
astype(int)
を使用したFloatからIntへの変換
astype(int)
メソッドは、Pandasでの型変換のための簡単な方法を提供します。列のデータ型を整数に直接キャストします。ただし、その動作を理解することが重要です。小数部分を切り捨て、事実上床関数(floor)を実行します。つまり、小数点以下の部分を切り捨て、常に切り下げます。
例:
import pandas as pd
data = {'col1': [1.5, 2.7, 3.2, 4.9, 5.1]}
df = pd.DataFrame(data)
df['col1_int'] = df['col1'].astype(int)
print(df)
出力:
col1 col1_int
0 1.5 1
1 2.7 2
2 3.2 3
3 4.9 4
4 5.1 5
このメソッドの長所はシンプルさですが、柔軟性のない丸めの動作により、他の丸め戦略が必要な場合は適用性が制限されます。
柔軟な変換のためのpd.to_numeric()
の活用
pd.to_numeric()
は、より高度な制御と柔軟性を提供します。主に様々なデータ型を数値形式に変換するために設計されていますが、特に丸め関数と組み合わせることで、FloatからIntへの変換に非常に効果的です。
丸めを使った例:
import pandas as pd
import numpy as np
data = {'col1': [1.5, 2.7, 3.2, 4.9, 5.1, np.nan]}
df = pd.DataFrame(data)
df['col1_int'] = pd.to_numeric(df['col1'], errors='coerce').round().astype(int)
print(df)
出力:
col1 col1_int
0 1.5 2
1 2.7 3
2 3.2 3
3 4.9 5
4 5.1 5
5 NaN NaN
ここでは、errors='coerce'
により、数値以外の値はNaN
に変換され、エラーが防止されます。round()
は、最終的なastype(int)
変換の前に、最も近い整数に丸めます。
エラー処理と高度な丸め
より正確な丸め制御には、NumPyの関数を使用します。
np.floor()
:最も近い整数に切り下げます。np.ceil()
:最も近い整数に切り上げます。
pd.to_numeric()
のerrors
パラメータを使用して、潜在的なエラー(数値以外の値など)を処理することを忘れないでください。'coerce'
を選択すると、問題のある値がNaN
に置き換えられ、エラーが防止されます。あるいは、'raise'
は例外を発生させ、'ignore'
は数値以外の値をそのままにします。