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

Pandas未操作的time列从int64转为float,如何恢复为整型

类型变化原因

你执行的第一行批量赋值代码中,data_A.columns.difference(['scan', 'label', 'level','index']) 会返回除了这4个列之外的所有列名,time列也包含在内。当你给这部分列赋值np.nan时,由于pandas原生int64类型不支持空值存储,time列会自动向上转型为可兼容空值的float64类型。


解决方案

你可以根据自己的业务场景选择对应方案:

  • 场景1:已处理完time列空值,不需要保留空值
    直接转成int类型即可,注意转换结果要重新赋值给原列才会生效:

    # 可以先按业务规则填充空值,比如前向填充,再转类型
    data_A['time'] = data_A['time'].ffill().astype(int)
    # 若已经确定time列无空值,可直接转换
    # data_A['time'] = data_A['time'].astype(int)
    
  • 场景2:需要保留time列的空值,同时希望用整数类型存储
    可以使用pandas支持空值的Nullable Integer类型Int64(首字母大写):

    data_A['time'] = data_A['time'].astype('Int64')
    

    该类型可同时存储整数和pd.NA空值,不会自动转为float。

  • 场景3:希望从根源避免time列被修改
    把time加入第一行代码的排除列列表即可,不会被批量赋值np.nan,自然不会发生类型转换:

    data_A.loc[data_A['scan'] == 1., data_A.columns.difference(
        ['scan', 'label', 'level','index', 'time'])] = np.nan
    

内容的提问来源于stack exchange,提问作者Lee

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 15:54:05