在Python中将十六进制转换为负整数

时间:2018-11-28 08:48:22

标签: python pandas hex

我想将x列中的十六进制转换为正确的负int,如“ true”列中所示,但是我却在y列中得到了结果。

x        y     true
fdf1   65009   -527

我尝试了这个(我知道这是不正确的)

df["y"] = df["x"].apply(int,base=16)

从这个link我知道这个功能:

def s16(value):
    return -(value & 0x8000) | (value & 0x7fff)

a = s16(int('fdf1', 16))
print(a)

可以将单个值转换为正确的值,但是如何将其应用于Pandas数据框中的新列?

2 个答案:

答案 0 :(得分:3)

使用lambda函数:

df["y"] = df["x"].apply(lambda x: s16(int(x, base=16)))

或更改更清晰代码的功能:

def s16(value):
    value = int(value, base=16)
    return -(value & 0x8000) | (value & 0x7fff)

df["y"] = df["x"].apply(s16)
print (df)
      x    y  true
0  fdf1 -527  -527

答案 1 :(得分:2)

最简单的方法是将其转换为整数,并使用.astype将其重新解释为16位整数:

import numpy as np
df["y"] = df["x"].apply(lambda x: int(x, base=16)).astype(np.int16)

y的dtype将为int16,因此对该列与其他int16进行的任何操作都将其值保持在-32768和32767之间。