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

如何在Pandas中将整数错误码转为字节串并拆分至单独列?

问题:将错误码二进制位拆分到Pandas对应列

我每分钟从设备接收整数格式的错误码,该错误码代表字节串,每一位对应特定错误。为满足分析需求,需将这些位在Pandas中拆分为单独列。目前已实现将错误码转为二进制列表,但无法填充到对应列,相关信息如下:

现有代码

def converttobinary(num, length=3):
    binary_string_list = list(format(num, '0{}b'.format(length)))
    return [int(digit) for digit in binary_string_list]


df = pd.DataFrame({'errorcode': [1,2,3],
                    'errorcodelist': ['', '', ''],
                    'errorcode01': ['', '', ''],
                    'errorcode02': ['', '', ''],
                    'errorcode03': ['', '', ''],})
df['errorcodelist'] = df.apply(lambda row : converttobinary(row['errorcode']), axis = 1)

print(df)

当前运行结果

errorcode errorcodelist errorcode01 errorcode02 errorcode03
0          1      [0, 0, 1]
1          2      [0, 1, 0]
2          3      [0, 1, 1]

预期结果

errorcode errorcodelist errorcode01 errorcode02 errorcode03
0          1      [0, 0, 1]           1           0           0
1          2      [0, 1, 0]           0           1           0
2          3      [0, 1, 1]           0           1           1

解决方案

方法一:拆分已生成的二进制列表

利用pd.Series将errorcodelist中的列表元素拆分为多列,注意列名顺序要和二进制列表的位对应(你的列表是高位在前,所以要反向匹配列名):

def converttobinary(num, length=3):
    binary_string_list = list(format(num, '0{}b'.format(length)))
    return [int(digit) for digit in binary_string_list]


df = pd.DataFrame({'errorcode': [1,2,3],
                    'errorcodelist': ['', '', ''],
                    'errorcode01': ['', '', ''],
                    'errorcode02': ['', '', ''],
                    'errorcode03': ['', '', ''],})
df['errorcodelist'] = df.apply(lambda row : converttobinary(row['errorcode']), axis = 1)

# 将列表拆分为对应列:列表第0位对应errorcode03,第1位对应errorcode02,第2位对应errorcode01
df[['errorcode03', 'errorcode02', 'errorcode01']] = df['errorcodelist'].apply(pd.Series)

print(df)

方法二:直接通过位运算提取(更高效)

如果不需要中间的errorcodelist列,直接用位运算提取每一位错误码,效率比生成列表再拆分更高:

import pandas as pd

df = pd.DataFrame({'errorcode': [1,2,3],
                    'errorcode01': ['', '', ''],
                    'errorcode02': ['', '', ''],
                    'errorcode03': ['', '', ''],})

# 位运算提取每一位:&1取当前位,>>n右移n位
df['errorcode01'] = (df['errorcode'] & 1).astype(int)
df['errorcode02'] = ((df['errorcode'] >> 1) & 1).astype(int)
df['errorcode03'] = ((df['errorcode'] >> 2) & 1).astype(int)

# 如果需要保留errorcodelist列,反向组合即可
df['errorcodelist'] = df.apply(lambda row: [row['errorcode03'], row['errorcode02'], row['errorcode01']], axis=1)

print(df)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 05:01:26