代码之家  ›  专栏  ›  技术社区  ›  Kvothe

熊猫将十六进制转换为负整数

  •  1
  • Kvothe  · 技术社区  · 7 年前

    所以,我有一个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'
    

    感谢您的帮助!

    1 回复  |  直到 7 年前
        1
  •  1
  •   jezrael    7 年前

    您可以将值转换为 int 带底座 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