我如何逐位反转十六进制数字的每个值?

问题描述 投票:0回答:1

我有一个数据框,该数据框具有一个名为hexa的列,该列具有这样的十六进制值。它们是dtype对象。

               hexa
0  00802259AA8D6204
1  00802259AA7F4504
2  00802259AA8D5A04

我想删除第一位和最后一位,并按如下所示按位反转值:

         hexa-rev
0  628DAA592280
1  457FAA592280
2  5A8DAA592280

请帮助

pandas dataframe int hex reverse
1个回答
0
投票

我将在此处向您展示完整的解决方案,然后在下面解释其部分:

def reverse_bits(bits):
    trimmed_bits = bits[2:-2]
    list_of_bits = [i+j for i, j in zip(trimmed_bits[::2], trimmed_bits[1::2])]
    reversed_bits = [list_of_bits[-i] for i in range(1,len(list_of_bits)+1)]
    return ''.join(reversed_bits)

df['hexa-rev'] = df['hexa'].apply(lambda x: reverse_bits(x))

可能有两种方法,但是这种方法应该可以解决您的问题。通用策略将是定义一个函数,然后使用apply()方法将其应用于列中的所有值。它应该看起来像这样:

df['hexa-rev'] = df['hexa'].apply(lambda x: reverse_bits(x))

现在,我们需要定义将要应用到它的功能。将其分解成几个部分,我们通过索引剥离第一位和最后一位。由于负索引的工作方式,因此无论大小如何,都将消除第一位和最后一位。您的结果是一个字符列表,我们将在处理后将它们合并在一起。

def reverse_bits(bits):
    trimmed_bits = bits[2:-2]

第二行遍历字符列表,将每个位的第一个和第二个字符匹配在一起,然后将它们连接成一个代表该位的字符串。

def reverse_bits(bits):
    trimmed_bits = bits[2:-2]
    list_of_bits = [i+j for i, j in zip(trimmed_bits[::2], trimmed_bits[1::2])]

倒数第二行以相反的顺序返回您刚创建的列表。最后,该函数返回单个位字符串。

def reverse_bits(bits):
    trimmed_bits = bits[2:-2]
    list_of_bits = [i+j for i, j in zip(trimmed_bits[::2], trimmed_bits[1::2])]
    reversed_bits = [list_of_bits[-i] for i in range(1,len(list_of_bits)+1)]
    return ''.join(reversed_bits)

我以相反的顺序对其进行了解释,但是您想定义要应用于列的此函数,然后使用apply()函数来实现它。

© www.soinside.com 2019 - 2024. All rights reserved.