Pandasで「四捨五入」を行うにはいくつか方法があります。
どの方法を選ぶかは、丸めたい対象(DataFrame全体・特定の列・計算結果)や、小数点以下の桁数、処理の精度要件によって異なります。
以下で代表的な方法を詳しく整理します。
目次
round() メソッドを使う基本的な方法
Pandasでは DataFrame.round() または Series.round() を使うと簡単に四捨五入できます。
import pandas as pd
# サンプルデータ
df = pd.DataFrame({
"A": [1.234, 2.567, 3.891, 4.5],
"B": [10.111, 20.555, 30.999, 40.5]
})
print("=== 元のデータ ===")
print(df)
# 小数点2桁に四捨五入
print("\n=== DataFrame.round(2) 小数点2桁に四捨五入 ===")
print(df.round(2))
# 列ごとに異なる桁数で丸め
print("\n=== 列ごとに異なる桁数で丸め ===")
print(df.round({"A": 1, "B": 0}))
ポイント
round(n)の引数nで小数点以下の桁数を指定。- 引数に辞書を渡すと列ごとに異なる丸めが可能。
numpy.round() を使う方法
内部的にはPandasの round() も numpy.round() を利用しています。
NumPyを直接使うとより柔軟な計算が可能です。
import pandas as pd
import numpy as np
df = pd.DataFrame({
"A": [1.234, 2.567, 3.891, 4.5],
"B": [10.111, 20.555, 30.999, 40.5]
})
# NumPyで丸め(銀行丸め)
df["A_np_round1"] = np.round(df["A"], 1) # 小数点1桁
df["B_np_round0"] = np.round(df["B"], 0) # 整数
print("=== NumPyで丸めた列を追加 ===")
print(df)
NumPyの round() ではデフォルトで 銀行丸め(Banker’s Rounding, round half to even) が使われます。
例: np.round(2.5) → 2.0(偶数側に丸められる)
apply() を用いた柔軟な丸め
列ごとに異なるロジックを適用したい場合は apply() が便利です。
import pandas as pd
df = pd.DataFrame({
"A": [1.234, 2.567, 3.891, 4.5],
"B": [10.111, 20.555, 30.999, 40.5]
})
# Pythonのround()を使う(四捨五入)
df["A_py_round2"] = df["A"].apply(lambda x: round(x, 2))
print("=== Python組み込みround()を使った丸め ===")
print(df)
Python標準の round() は 四捨五入(round half away from zero) です。
例: round(2.5) → 2, round(3.5) → 4
(NumPyと挙動が異なるので注意)
整数単位での丸め(10単位・100単位など)
例えば「10円単位」「100単位」に四捨五入したい場合。
import pandas as pd
df = pd.DataFrame({
"B": [10.111, 20.555, 30.999, 40.5]
})
# 10単位で四捨五入
df["B_round10"] = (df["B"] / 10).round() * 10
# 100単位で四捨五入
df["B_round100"] = (df["B"] / 100).round() * 100
print("=== 10単位、100単位で四捨五入 ===")
print(df)
切り上げ・切り捨てとの比較
四捨五入だけでなく、切り捨て(floor)、切り上げ(ceil)、ゼロ方向への丸め(trunc)もよく使われます。
import pandas as pd
import numpy as np
df = pd.DataFrame({
"A": [1.234, 2.567, 3.891, -4.5]
})
# 切り捨て
df["A_floor"] = np.floor(df["A"])
# 切り上げ
df["A_ceil"] = np.ceil(df["A"])
# 0方向へ丸め
df["A_trunc"] = np.trunc(df["A"])
print("=== 切り捨て / 切り上げ / 0方向丸め ===")
print(df)
実務でよくある注意点
- 金融系の計算では「銀行丸め」か「四捨五入」かで結果が変わるため、仕様を確認する必要があります。
- Pandas/NumPy → 銀行丸め
- Python組み込み
round()→ 四捨五入
- NaNを含む列に
round()を使ってもエラーは出ず、NaNはそのまま残ります。 - 整数列(int型)に小数桁を指定しても効果はない(そのまま整数が返る)。
まとめ
- 基本は
df.round(n)を使うのがシンプル。 - 列ごとに異なる精度 →
df.round({"A":1, "B":0}) - 丸め方の違いに注意(NumPy=銀行丸め, Python=四捨五入)
- 単位丸め(10単位など) → 割り算 →
round()→ 掛け算で対応。
以上、Pandasで四捨五入を行う方法についてでした。
最後までお読みいただき、ありがとうございました。
