pandas 将DataFrame字符列转换为整数表示形式

6za6bjd0  于 2023-03-06  发布在  其他
关注(0)|答案(2)|浏览(229)

我有一个 Dataframe ,其中包含一列要转换为整数的字符。某些字符是多字符,例如"\b"。使用ord运行apply会导致TypeError。
我尝试使用ord()进行转换,它本身运行良好,但当我尝试在DataFrame上使用它时,抛出了TypeError:

ft_x['keyCode'].apply(lambda row : ord(row))

TypeError: ord() expected a character, but string of length 2 found

到达字符"\b"时引发TypeError。
不过,这样做就可以正常工作:

x = '\b'
ord(x)

8

我错过了什么?
当在 Dataframe 元素上运行时,ord()将"\b"等字符解释为字符串,而不是字符的Unicode表示形式-在"\b"的情况下使用退格键。
作为参考,我正在处理这个数据集:https://ieee-dataport.org/open-access/emosurv-typing-biometric-keystroke-dynamics-dataset-emotion-labels-created-using使用FixedTextTypingDataset.csv我需要keyCode列作为整数。
一个二个一个一个

0sgqnhkj

0sgqnhkj1#

必须使用apply中的列表来转换字符串中的每个字符:

ft_x['ord'] = (ft_x['keyCode'].str.encode('utf-8')
                              .str.decode('unicode-escape')
                              .map(ord))

# Output
  keyCode  ord
0       a   97
1      \b    8
2  \u0030   48
5ssjco0h

5ssjco0h2#

将多字符字符串转换为字节,然后再转换回整数即可。

def char_to_int(char):
    #ignore NaNs
    if type(char) == float:
      pass
    elif len(char) == 1:
        return int(ord(char))
    else:
        return int(int.from_bytes(char.encode(), byteorder='big'))

ft_x['keyCode'] = ft_x['keyCode'].apply(char_to_int)

相关问题