Преобразование шестнадцатеричного в отрицательное int в Python - PullRequest
0 голосов
/ 28 ноября 2018

Я хочу преобразовать шестнадцатеричное в столбце x в правильный отрицательный int, как видно в столбце «true», но вместо этого я получил результат в столбце y.

x        y     true
fdf1   65009   -527

Я пробовал это (я знаю, что это не правильно)

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

и по этой ссылке Я знаю эту функцию:

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

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

может преобразовать одно значение в правильное, но как применить его, чтобы сделатьновый столбец во фрейме данных Pandas?

Ответы [ 2 ]

0 голосов
/ 28 ноября 2018

Самый простой способ - преобразовать его в целое число и переинтерпретировать его как 16-разрядное целое, используя .astype:

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

Тип столбца y будет равен int16,поэтому любая операция, выполняемая в этом столбце с другими int16, сохранит значения в диапазоне от -32768 до 32767.

0 голосов
/ 28 ноября 2018

Используйте 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...