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で四捨五入を行う方法についてでした。
最後までお読みいただき、ありがとうございました。