我的pandas.Series
有多个str
十六进制值,如:
74 ,68 ,69 ,73 ,20 ,69 ,73 ,20 ,6d ,79 ,20 ,74 ,65 ,78 ,74 ,20 ,74 ,6f ,20 ,68 ,65 ,78
00, ff, aa, dd, 11, 22, 33, 44, 55, 00, ff, aa, dd, 11, 22, 33, 44, 55
74 ,68 ,69 ,73 ,20 ,69 ,73 ,20 ,6d ,79 ,20 ,74 ,65 ,78 ,74 ,20 ,74 ,6f ,20 ,68 ,65 ,78
74 ,68 ,69 ,73 ,20 ,69 ,73 ,20 ,6d ,79 ,20 ,74 ,65 ,78 ,74 ,20 ,74 ,6f ,20 ,68 ,65 ,78
00, ff, aa, dd, 11, 22, 33, 44, 55, 00, ff, aa, dd, 11, 22, 33, 44, 55
我正在尝试将hex转换为ascii,如:
df['value'] = df['value'].apply(lambda x: codec.decode(x, 'hex')
我收到的错误如下:
binascii.Error: decoding with 'hex' codec failed (Error: Odd-length string)
我预计某些行会出现这些错误,但需要更改可转换为转换状态的值。如果出现错误,我怎么能对系列的价值无效呢?
预期产出:
this is my text to hex
00, ff, aa, dd, 11, 22, 33, 44, 55, 00, ff, aa, dd, 11, 22, 33, 44, 55
this is my text to hex
this is my text to hex
00, ff, aa, dd, 11, 22, 33, 44, 55, 00, ff, aa, dd, 11, 22, 33, 44, 55
答案 0 :(得分:3)
如果您想提供自己的转换器以允许它响应错误,您可以提供一个函数而不是lambda。您对如何处理超出范围值的要求并不十分清楚,因此我将只展示一个基本示例:
def my_ascii_convert(char):
value = int(char, 16)
if 32 <= value < 128:
return chr(value)
else:
return char
df['value'] = df['value'].apply(my_ascii_convert)
答案 1 :(得分:1)
使用int()
要简单得多
def fn(foo):
return int(foo, 16)
data = pd.Series(['74', '68', '69', '6d'])
data.apply(fn)