我想将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数据框中的新列?
答案 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之间。