Python Pandas String - >十六进制 - >整数 - >字符串转换

时间:2017-03-15 16:26:23

标签: python string pandas hex decimal

我的数据来自嵌入式硬件。消息以长十六进制的形式出现,但是这个十六进制实际上是连接4个字符块中的几个不同数据组的硬件。为了混淆这个问题,数据库正在将这个长十六进制转换为低于我有权访问的层的小数。

我的数据框:

dict = {'A': ['foo', 'bar', 'baz'], 'B': ['1346', '9953', '5246']}
df = pd.DataFrame(dict)

我想将列B转换为名为LongHex的十六进制,将LongHex的最后4个字符拆分为ShortHex,然后将ShortHex转换回来到一个名为ShortDec的整数中,最后用LongHex包裹ShortHex=""列,这样Excel就不会将某些十六进制值转换为科学记数法。

这是我到目前为止所尝试的内容:

df['LongHex'] = df['B'].apply(lambda x: hex)
df['ShortHex'] = df['LongHex'].str[-4:]
df['ShortDec'] = df['ShortHex'].apply(lambda x: int)
df['LongHex'] = df['LongHex'].apply(str)
df['ShortHex'] = df['ShortHex'].apply(str)
df['LongHex'] = df['LongHex'].apply(lambda x: '="' + x + '"')
df['ShortHex'] = df['ShortHex'].apply(lambda x: '="' + x + '"')

最终将此数据帧输出到.csv。当我打开文件时,这就是我得到的:

foo, 1346, <built-in function hex>, nan, <type 'int'>
bar, 9953, <built-in function hex>, nan, <type 'int'>
baz, 5246, <built-in function hex>, nan, <type 'int'>

1 个答案:

答案 0 :(得分:1)

改变这个:

df['LongHex'] = df['B'].apply(lambda x: hex)
df['ShortDec'] = df['ShortHex'].apply(lambda x: int)

对此:

df['LongHex'] = df['B'].apply(lambda x: hex(x))
df['ShortDec'] = df['ShortHex'].apply(lambda x: int(x))

另外作为旁注,我看到你将它们转换为字符串以后为什么不一气呵成呢:

df['LongHex'] = df['B'].apply(lambda x: str(hex(x))[-4:])