我有来自嵌入式硬件的数据。消息以长十六进制的形式出现,但这个十六进制实际上是在 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'>
更改以下内容:
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:])