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
相关产品推荐
相关产品推荐

