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

如何避免Pandas横向拼接时int64被无意转换为float64?

解决pandas拼接shift后列类型转为float64的问题

这是个很常见的pandas类型转换问题,根源确实像你发现的那样——shift(-1)会在最后一行生成NaN值,而原生的int64类型无法容纳缺失值,所以pandas会自动把列的 dtype 提升为float64(因为float类型支持NaN)。这里有几种方法可以避免这种转换:

方法1:使用pandas的可空整数类型(推荐)

pandas提供了Int64(注意大写I)这种支持缺失值的整数类型,你可以先把原列转成该类型,再执行拼接操作:

# 先将原列转为可空整数类型
df['op'] = df['op'].astype('Int64')
# 执行拼接
df = pd.concat([df, df.shift(-1).add_suffix('_next')], axis=1)

此时查看dtypes会发现两列都保持整数类型:

df.dtypes
# op        Int64
# op_next   Int64
# dtype: object

方法2:填充缺失值后转回int64

如果你不想使用可空类型,可以给shift后的缺失值填充一个符合业务逻辑的整数(比如0、最后一行的值等),再强制转回int64:

# 处理shift后的缺失值并转类型
df_next = df.shift(-1).add_suffix('_next').fillna(0).astype('int64')
# 拼接
df = pd.concat([df, df_next], axis=1)

⚠️ 注意:填充的值需要根据你的业务场景选择,确保不会影响后续分析。

方法3:用assign直接创建列(更简洁)

你也可以用assign方法一步完成列的创建和类型保持:

df = df.assign(op_next=df['op'].shift(-1).astype('Int64'))

这种写法更紧凑,效果和方法1一致。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 07:24:24