You need to enable JavaScript to run this app. Pandas如何直接给单元格赋值为整数类型无需后续转换
优惠活动
大模型
产品
解决方案
定价
更多

Pandas如何直接给单元格赋值为整数类型无需后续转换

问题原因

直接赋值整数自动转为float64的核心原因是:新增列时如果没有提前指定类型,pandas会为未赋值的单元格默认填充NaN,而NaN属于float类型,会直接把整列的 dtype 向上推断为float64,即使给部分单元格赋整数值也会被强制转换。

一次性完成整数赋值的方案

  • 方案1:提前声明列的整数类型,再赋值
    新增列时先指定好int类型,后续赋值就不会自动转float:

    # 提前初始化指定多级列的类型为int64
    df[('route', 'id')] = pd.Series(dtype='int64')
    # 再执行原来的赋值操作,结果直接是int64类型
    df.loc[indexes, ('route', 'id')] = int(i)
    

    如果你的列可能存在缺失值,可以用pandas的可空整数类型Int64(首字母大写),避免出现缺失值就自动转float的问题:

    df[('route', 'id')] = pd.Series(dtype='Int64')
    
  • 方案2:全量赋值时直接生成整数序列,无需遍历
    如果你是要给整个列分配enumerate的索引,完全不用逐行遍历,直接整列赋值即可,默认就是整数类型:

    # 直接生成从0开始的连续整数索引赋值
    df[('route', 'id')] = pd.RangeIndex(len(df))
    
  • 方案3:赋值时直接指定数据类型
    不想提前声明列的话,可以在赋值时把值转为int64类型的数组再写入:

    df.loc[indexes, ('route', 'id')] = pd.Series([int(i)]*len(indexes), dtype='int64').values
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.18 19:24:00