隐式ascii转换为十进制python

时间:2018-07-23 21:56:24

标签: python-3.x pandas dataframe ascii

我有一个数据熊猫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,但是也许我找不到类似的东西。 但是,它没有用。如果有人可以帮助我,我将非常感激。

2 个答案:

答案 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)