如何用Pandas提取DataFrame浮点数列的整数部分?
Pandas保留浮点数列的整数部分(舍弃小数)解决方案
没问题!在Pandas里批量处理整列的浮点数据,保留整数部分舍弃小数,有好几种简洁高效的方法,比你单个处理要方便多了,我给你详细说说:
方法1:直接转换整数类型 astype(int)
这是最直接的方式,Pandas的astype(int)会自动截断小数部分,只保留整数部分,完全符合你的需求。代码示例:
# 假设你的浮点数列名为'num_col' df['num_col'] = df['num_col'].astype(int)
对于你提供的测试数据,执行后就会得到你想要的结果:
0 59
1 50
2 50
3 55
4 58
5 58
6 55
7 57
8 46
9 59
10 57
注意:这个方法对正数非常友好,如果是负数的话,同样会截断小数(比如-59.9会变成-59),和你用divmod的效果一致。
方法2:使用整除运算符 // 1
Pandas支持向量化运算,直接对整列使用// 1(和1做整除),就能快速得到每个元素的整数部分:
# 先做整除,再转整数类型(可选,如果你需要整数而非浮点类型) df['num_col'] = (df['num_col'] // 1).astype(int)
这个方法的优势是逻辑直观,和你手动处理单个数字的思路类似,而且向量化运算的效率远高于逐元素处理。
方法3:沿用你熟悉的divmod(适合小数据量)
如果你想继续使用divmod的思路,也可以用apply函数逐元素处理,但要注意这个方法在大数据量下效率较低,只适合小数据集:
df['num_col'] = df['num_col'].apply(lambda x: divmod(x, 1)[0]).astype(int)
这里用lambda函数对每个元素执行divmod,然后取返回值的第一个元素(整数部分),最后转成整数类型。
完整测试示例
为了让你更清楚,我把你的测试数据完整实现一遍:
import pandas as pd # 构造你的DataFrame data = [ 59.9179, 50.3874, 50.3874, 55.0089, 58.423, 58.8227, 55.2471, 57.2266, 46.4312, 59.9097, 57.1417 ] df = pd.DataFrame(data, columns=['original_num']) # 用方法1处理 df['integer_part'] = df['original_num'].astype(int) # 查看结果 print(df[['original_num', 'integer_part']])
执行后输出的integer_part列就是你想要的整数结果。
内容的提问来源于stack exchange,提问作者Stacey
相关产品推荐
相关产品推荐

