Python Pandasの列に対して桁数を指定して四捨五入する「decimal」

'21/06/12更新:整数の場合に加えて、小数点の場合の例も追記しました。
 本記事では、pandas(パンダス)データフレーム形式の列データに対して、四捨五入する雛形コードを載せました。下図はその例で、列名「RM」と「PRICE」は整数に、それ以外の列は小数点第一までの値に変換しています。

f:id:HK29:20210612202336p:plain

■本プログラム

#!/usr/bin/env python
# coding: utf-8

# In[1]:


import pandas as pd
from decimal import Decimal, ROUND_HALF_UP
import matplotlib.pyplot as plt

# csvファイルをpandasデータフレーム形式で読み込む
file_path = 'test_data.csv'
df = pd.read_csv(file_path)
df


# In[2]:


# 列名別に桁数を指定して四捨五入する
df2 = df.copy()
int_column_list = ['RM', 'PRICE']
for my_col in df.columns:
    # 整数にする
    if my_col in int_column_list:
        df2[my_col] = df2[my_col].map(lambda x: int(Decimal(str(x))
                                 .quantize(Decimal('0'), rounding=ROUND_HALF_UP)))
    # 小数第一にする
    else:
        df2[my_col] = df2[my_col].map(lambda x: float(Decimal(str(x))
                                 .quantize(Decimal('0.1'), rounding=ROUND_HALF_UP)))
df2


# In[3]:


# 型のチェック
df2.dtypes


# In[4]:


# 四捨五入したことによって、ダブり行が生じてた場合に重複行分を削除する
df3 = df2.drop_duplicates()
df3


# In[5]:


# 基本統計量
df3.describe().T


# In[6]:


# ヒストグラム
df3.hist(bins=10)
plt.tight_layout()


# In[7]:


# csvファイルに保存
df3.to_csv('new_' + file_path, index=False)

以上

<広告>