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

如何将DataFrame中二进制列的字节值列表拼接为连续十六进制字符串?

如何将DataFrame中二进制列的字节值列表拼接为连续十六进制字符串?

我完全明白你遇到的困扰——你想要的是把每个字节的数值直接转成十六进制字符串并拼接起来,结果之前的操作总是绕回原random_id字符串,这是因为你大概率不小心把字节序列解码回了原字符串,而不是直接处理每个字节的十六进制表示。

下面给你两种简洁可靠的解决方案,直接得到你想要的313233343536373839303132这样的结果:


方案一:利用bytes对象的hex()方法(最简洁高效)

Python的bytes对象自带hex()方法,可以直接把字节序列转换成连续的十六进制字符串,完美匹配你的需求。我们只需要把列表里的字节值转成bytes对象,再调用这个方法即可:

import pandas as pd

# 模拟你的DataFrame结构
df = pd.DataFrame({
    'random_id': ['123456789012'],
    'random_id_cesu8': [[49, 50, 51, 52, 53, 54, 55, 56, 57, 48, 49, 50]]
    # 注:这里的49对应十六进制0x31(字符'1'的UTF-8字节),也就是你看到的列表显示值31
})

# 核心转换逻辑
df['concatenated_hex'] = df['random_id_cesu8'].apply(lambda x: bytes(x).hex())

# 查看结果
print(df['concatenated_hex'].iloc[0])  # 输出: 313233343536373839303132

这个方法的优势是:

  • 代码极简,可读性强
  • 底层是C实现,处理大规模DataFrame时性能更好

方案二:手动格式化每个字节值(更灵活,适合自定义需求)

如果你需要对十六进制格式做自定义调整(比如生成大写十六进制、添加分隔符等),可以用列表推导式逐个格式化字节值:

def byte_list_to_hex(byte_list):
    # 对每个字节值,格式化为两位小写十六进制字符串
    return ''.join(f'{byte:02x}' for byte in byte_list)

df['concatenated_hex'] = df['random_id_cesu8'].apply(byte_list_to_hex)

如果想要生成大写的十六进制字符串,只需要把02x改成02X即可,结果会变成313233343536373839303132的大写版本313233343536373839303132(每个字节的十六进制表示保持两位,字母大写)。


为什么之前的方法得到了原random_id?

你之前尝试的方法应该是类似这样的错误操作:

# 错误示例:解码字节序列回原字符串
df['wrong_result'] = df['random_id_cesu8'].apply(lambda x: bytes(x).decode('utf-8'))
# 得到的是原random_id: '123456789012'

这是因为decode('utf-8')的作用是把字节序列还原成它编码的原字符串,而不是提取字节的十六进制表示——这就是你一直得到原random_id的核心原因。

备注:内容来源于stack exchange,提问作者its_niks

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.14 13:32:59