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

