You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将DataFrame指定列中小数位数超1位的数值替换为nan并转整型

解决方案

前置依赖

首先导入需要的依赖库:

import pandas as pd
import numpy as np

步骤1:清理无效浮点数值

假设待处理的DataFrame名为df,要处理的目标列名为target_col,执行以下代码完成过滤:

df['target_col'] = df['target_col'].where(
    (df['target_col'] > 0) & (df['target_col'] % 1 == 0),
    other=np.nan
)

逻辑说明

  • df['target_col'] > 0 筛选所有正数值,自动排除负数
  • df['target_col'] % 1 == 0 筛选小数部分为0的数值,也就是以.0结尾的有效数值,自动过滤存在其他小数位的垃圾值
  • 不符合两个条件的数值会被统一替换为np.nan
  • 如果你的数据存在浮点精度误差(比如实际应为100.0的数值被存储为100.0000000001),可以将第二个判断条件替换为np.isclose(df['target_col'] % 1, 0),避免误判。

步骤2:转换为整型

由于Python原生int类型不支持空值,这里使用pandas提供的可空整型Int64(首字母大写)完成类型转换:

df['target_col'] = df['target_col'].astype('Int64')

转换后列中有效数据为整型,空值为pandas兼容的pd.NA,不会出现类型报错。

测试验证

你可以用以下代码验证效果,输入就是你给出的示例数据:

test_data = [129.0, np.nan, 100.0, 87.0, 40.0, 344.992, 130.0, 101.0, 227.0, 147.0, 190.0, 83.0, -144.63542183979368]
df = pd.DataFrame({'target_col': test_data})

# 执行清理
df['target_col'] = df['target_col'].where((df['target_col'] > 0) & (df['target_col'] % 1 == 0), np.nan)
# 转换类型
df['target_col'] = df['target_col'].astype('Int64')

print(df['target_col'])

输出结果和你预期的完全一致。

内容的提问来源于stack exchange,提问作者Gaurav D Verma

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.01 21:36:00