Pandas -将整数转换为字节串并更新单个字段

s3fp2yjn  于 2022-11-20  发布在  其他
关注(0)|答案(1)|浏览(134)

**问题:**我从一台机器上收到整数形式的错误代码(每分钟)。这个错误代码代表一个字节串,每一位代表一个特定的错误。为了进行分析,我需要在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
1         [0, 0, 1]
2         [0, 1, 0]
3         [0, 1, 1]

预期结果:

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

有没有人有一个想法,如何得到预期的结果?

mklgxw1f

mklgxw1f1#

您可以使用另一个apply调用来提取列表的元素:

df['errorcode01'] = df.apply(lambda row : row['errorcodelist'][2], axis = 1)
df['errorcode02'] = df.apply(lambda row : row['errorcodelist'][1], axis = 1)
df['errorcode03'] = df.apply(lambda row : row['errorcodelist'][0], axis = 1)

或者,您可以在创建 Dataframe 期间填充其他列:

from collections import defaultdict
errorcodes = [1,2,3]

# create dataframe
obj = defaultdict(list)
bit_length = 3
for code in errorcodes:
    obj["errorcode"].append(code)

    binary_list = converttobinary(code, length=bit_length)
    obj["errorcodelist"].append(binary_list)
    
    # add the bits to the corresponding list
    for i, bit in enumerate(reversed(binary_list)):
        obj[f"bit{i+1:02d}"].append(bit)

df = pd.DataFrame(obj)

相关问题