Python中如何不四舍五入将小数转整数?含DataFrame场景
Pandas将小数转换为整数(不进行四舍五入)
需求说明
把DataFrame中的数值列(A、B)的小数直接截断为整数,保留整数部分,不做四舍五入处理。
原始DataFrame
Date A B 01-01-2022 12.87 0.67 02-01-2022 3.8976 123.98 03-01-2022 6.7654 23.98 04-01-2022 2.897 0.098 05-01-2022 3.986 0.76 06-01-2022 1.09 12.45
期望输出
Date A B 01-01-2022 12 0 02-01-2022 3 123 03-01-2022 6 23 04-01-2022 2 0 05-01-2022 3 0 06-01-2022 1 12
解决方案
方法1:用astype(int)直接转换
对于正数来说,astype(int)会直接截断小数部分,完全匹配需求:
import pandas as pd # 构造原始DataFrame df = pd.DataFrame({ 'Date': ['01-01-2022', '02-01-2022', '03-01-2022', '04-01-2022', '05-01-2022', '06-01-2022'], 'A': [12.87, 3.8976, 6.7654, 2.897, 3.986, 1.09], 'B': [0.67, 123.98, 23.98, 0.098, 0.76, 12.45] }) # 转换指定数值列 df[['A', 'B']] = df[['A', 'B']].astype(int)
方法2:用numpy.floor()(适配负数场景)
如果数据包含负数,需要严格向下取整的话,可以用numpy.floor()再转整数:
import pandas as pd import numpy as np df = pd.DataFrame({ 'Date': ['01-01-2022', '02-01-2022', '03-01-2022', '04-01-2022', '05-01-2022', '06-01-2022'], 'A': [12.87, 3.8976, 6.7654, 2.897, 3.986, 1.09], 'B': [0.67, 123.98, 23.98, 0.098, 0.76, 12.45] }) df[['A', 'B']] = np.floor(df[['A', 'B']]).astype(int)
注意点
- 若数据含负数:
astype(int)是向零取整(比如-1.8转为-1),numpy.floor()是向下取整(比如-1.8转为-2),按需选择即可。 - 转换后列类型会变为
int,满足整数格式要求。
内容的提问来源于stack exchange,提问作者Abinash Mohanty
相关产品推荐
相关产品推荐

