如何快速将Pandas混合类型列中的float转为int?
高效批量转换DataFrame中float类型值为int的方法
你的思路完全正确——用.loc批量筛选+转换的方式,能彻底解决百万级数据下逐行遍历的效率问题,比iterrows快几个数量级。
核心解决方案
直接通过布尔掩码筛选目标行,再批量转换赋值:
# 生成布尔掩码:筛选出value列是float类型的行 mask = df['value'].apply(lambda x: isinstance(x, float)) # 批量将这些float值转为int df.loc[mask, 'value'] = df.loc[mask, 'value'].apply(int)
更严谨的版本(避免转换非整数float)
如果你的数据里存在非整数的float(比如5.5),不想误转换的话,可以在掩码里加上整数判断:
# 只筛选是整数型的float值(如5.0,排除5.5) mask = df['value'].apply(lambda x: isinstance(x, float) and x.is_integer()) df.loc[mask, 'value'] = df.loc[mask, 'value'].astype(int)
为什么这个方法快?
iterrows是逐行遍历,每一次.at赋值都是单独的IO操作,百万行数据会触发百万次操作;而.loc的批量操作是基于Pandas的向量化底层优化,一次性完成筛选和转换,能把处理时间从几十分钟压缩到几秒。
内容的提问来源于stack exchange,提问作者Chris Pare
相关产品推荐
相关产品推荐

