首页 > 解决方案 > 熊猫将十六进制转换为负整数

问题描述

所以,我有一个 pandas 数据框,其中包含一列Hex,我想将其转换为int

foo
0xff49f1
0xff49f0

以下 python 代码将对每一行执行预期结果:

bar_row_1 = 0xff49f1 - int((0xff49f1 << 1) & 0x1000000)
bar_row_1 = -46607

bar_row_2 = 0xff49f0 - int((0xff49f0 << 1) & 0x1000000)
bar_row_2 = -46608

但我想对数据框中的所有行执行此操作,并将结果输出到一个新列中,如下所示:

foo      bar
0xff49f1 -46607
0xff49f0 -46608

我的尝试如下:

df['bar'] = df['foo'].apply(lambda x: (x - int((x << 1) & 0x1000000)))

但我得到这个错误:

TypeError: unsupported operand type(s) for <<: 'str' and 'int'

感谢任何帮助!

标签: pandashex

解决方案


您可以将 value 转换为intwith base 16

df['bar'] = df['foo'].apply(lambda x: (int(x, 16) - int((int(x, 16) << 1) & 0x1000000)))
print (df)
        foo    bar
0  0xff49f1 -46607
1  0xff49f0 -46608

推荐阅读