PythonのPandasで四捨五入を行う方法について

Python,イメージ

AI実装検定のご案内

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で四捨五入を行う方法についてでした。

最後までお読みいただき、ありがとうございました。

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!
目次