对于十六进制数,如何按位反转列中的每个值?
How do I reverse each value in a column bit wise for a hex number?
我有一个数据框,其中有一个名为 hexa 的列,它具有这样的十六进制值。它们是 dtype 对象。
hexa
0 00802259AA8D6204
1 00802259AA7F4504
2 00802259AA8D5A04
我想删除第一位和最后一位并将值按位反转如下:
hexa-rev
0 628DAA592280
1 457FAA592280
2 5A8DAA592280
请帮忙
我将在此处向您展示完整的解决方案,然后在下面解释其各个部分:
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])]
倒数第二行returns 您刚刚以相反顺序制作的列表。最后,函数 returns 单个位串。
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() 函数实现它。
我有一个数据框,其中有一个名为 hexa 的列,它具有这样的十六进制值。它们是 dtype 对象。
hexa
0 00802259AA8D6204
1 00802259AA7F4504
2 00802259AA8D5A04
我想删除第一位和最后一位并将值按位反转如下:
hexa-rev
0 628DAA592280
1 457FAA592280
2 5A8DAA592280
请帮忙
我将在此处向您展示完整的解决方案,然后在下面解释其各个部分:
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])]
倒数第二行returns 您刚刚以相反顺序制作的列表。最后,函数 returns 单个位串。
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() 函数实现它。