将DataFrame字符列转整数时遇TypeError问题求助
问题分析与解决方法
错误原因
你遇到的问题核心在于:DataFrame中存储的\b、\u0010是字面量字符串(比如\b实际是由\和b两个字符组成的字符串),而非Python解析后的单个Unicode转义字符。
当你直接在代码里写x = '\b'时,Python会在编译阶段自动将这个转义序列解析为单个退格字符(长度为1),所以ord(x)能正常返回8;但从CSV文件读取数据时,这些转义序列是以原始文本形式保存的,每个元素都是多字符字符串,自然触发ord()的类型错误。
解决方案
需要先把这些字面量转义字符串解码为实际的Unicode字符,再调用ord()转换为整数,以下两种方法都可以实现:
方法1:使用ast.literal_eval安全解析
import ast ft_x['keyCode'] = ft_x['keyCode'].apply(lambda val: ord(ast.literal_eval(f'"{val}"')))
ast.literal_eval会将字符串字面量解析为对应的Python对象,比如把"\b"转换成单个退格字符,之后ord()就能正常获取其Unicode编码值。
方法2:使用codecs.decode处理转义序列
import codecs ft_x['keyCode'] = ft_x['keyCode'].apply(lambda val: ord(codecs.decode(val, 'unicode_escape')))
unicode_escape编码格式会将字面量转义序列解码为对应的Unicode字符,比如把\u0010转成对应控制字符,处理后即可用ord()转换。
验证效果
处理后可以检查结果:
print(ft_x.loc[33, 'keyCode']) # 输出8
内容的提问来源于stack exchange,提问作者Tomat0
相关产品推荐
相关产品推荐

