我有一个数据熊猫DataFrame,其中的一列用ASCII字符填充。我正在尝试将此列从ascii转换为十进制,例如,以下字符串应从十六进制转换为:
313533313936393239382e323834303638
收件人:
1531969298.284068
我尝试过
outf['data'] = outf['data'].map`(`lambda x: bytearray.fromhex(x).decode())
以及
outf['data'] = outf['data'].map(lambda x: ascii.fromhex(x).decode())
我得到的错误如下:
UnicodeDecodeError: 'utf-8' codec can't decode byte 0xbb in position 8: invalid start byte
我不确定问题在何处显现。我有一个txt文件,其内容示例如下:
data time
313533313936393239382e32373737343800 1531969299.283273000
313533313936393239382e32373838303400 1531969299.284253000
313533313936393239382e32373938353700 1531969299.285359000
当数据是普通整数时,lambda在我使用的地方可以正常工作:
outf['data'] = outf['data'].astype(str)
outf['data'] = outf['data'].str[:-2:]
outf['data'] = outf['data'].map(lambda x: bytearray.fromhex(x).decode())
outf['data'] = outf['data'].astype(int)
,但是现在它说编码有问题。
我已经看过Stackoverflow,但是也许我找不到类似的东西。 但是,它没有用。如果有人可以帮助我,我将非常感激。
答案 0 :(得分:0)
这种lambda可以解决问题:
>>> f = lambda v: float((bytearray.fromhex(v)))
>>> f('313533313936393239382e323834303638')
1531969298.284068
请注意,在注释部分使用由astype提示的numpy的Scott Boston可能是更好的性能。
答案 1 :(得分:0)
您可以将map
与lambda函数一起用于bytearray.fromhex和astype
进行浮动。
out['data'].map(lambda x: bytearray.fromhex(x).decode()).astype(float)