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

如何在Python Pandas中拼接二进制列?列数超12时遇异常

问题分析与解决方案

你遇到的这个奇怪负数结果,本质是整数溢出导致的!

为什么会出现 -2147483648?

你的代码里多了一步完全没必要的操作:把拼接好的字符串转成整数再转回字符串。当列数超过12时,拼接后的字符串是13位(比如"0010000000000"),把它当作十进制数转成int时,pandas默认会使用numpy的int32类型——而int32的最大值只有2147483647(约20亿),但13位的十进制数100000000000远远超出了这个范围,溢出后就变成了int32能表示的最小值-2147483648。

解决方法:直接操作字符串,跳过整数转换

我们的目标是生成二进制签名字符串,完全不需要绕到整数这一步,直接拼接就行:

最简实现

df['new'] = df.astype(str).sum(axis=1)

因为你的所有列值都是0或1,转成字符串后拼接出来的长度正好等于列数,直接就能得到你想要的固定长度二进制字符串(比如13列时就是"0010000000000")。

稳妥补零版(可选)

如果担心某些极端情况(比如列值意外不是0/1导致长度不足),可以用str.zfill()强制补前导零,保证长度等于列数:

col_num = df.shape[1]
df['new'] = df.astype(str).sum(axis=1).str.zfill(col_num)

高效版(适合超大DataFrame)

如果你的数据量很大,字符串拼接的效率可以再优化,用numpy的向量操作来处理:

import numpy as np
df['new'] = np.apply_along_axis(lambda row: ''.join(row.astype(str)), axis=1, arr=df.values)

测试验证

用你13列的例子测试:

a = np.zeros(shape=(3,13))
df = pd.DataFrame(a).astype(int)
df[2] = 1
df['new'] = df.astype(str).sum(axis=1)
print(df['new'])

输出结果完全符合预期:

0    0010000000000
1    0010000000000
2    0010000000000
Name: new, dtype: object

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.13 06:30:55