在我的输入数据中,似乎当收集数据的记录器以低功耗运行时,它会引入一些特殊字符,例如“v”或“@”。
我用pandas read_csv(engine='python')加载了数据集。我必须使用 engine='python' 否则我收到一条错误消息:
UnicodeDecodeError: 'utf-8' codec can't decode byte 0xb6 in position 2: invalid start byte
我发现了如何从 Pandas 数据框中排除特殊字符:
df.var_a = df.var_a.str.replace('[#,@,&,�,{,v,?]','')
这会将“@”等特殊字符替换为“”,但我在数据帧“\x”中也有这个特殊字符,我无法使用上面显示的代码将其删除,我收到此错误消息:>
SyntaxError: (unicode error) 'unicodeescape' codec can't decode bytes in position 24-25: truncated \xXX escape
如何从 Pandas 数据框中删除“\x”?
答案 0 :(得分:2)
请注意,\x
用于匹配 \xYY 格式的十六进制字符,例如\x20.
如果您想删除对您来说显示为特殊字符的Unicode序列,您可以使用\X
(大写字母X
而不是小写字母x
),如下:< /p>
df.var_a = df.var_a.str.replace(r'\X', '', regex=True) # capital X instead of lower case x
如果要删除十六进制值,则必须指定特定值,例如要删除十六进制值 \x20,您可以使用:
df.var_a = df.var_a.str.replace(r'\x20', '', regex=True)
可能您无法删除范围内的十六进制值。需要一个一个的指定每个值才能去掉,不过可以试试用\X
去掉Unicode序列是否能达到你想要的效果。
现有正则表达式的旁注:
请注意,您不需要逗号 ,
来分隔正则表达式字符类中的特殊字符。
另一点需要注意的是,除了要排除的字符列表中的符号外,列表中还有一个类似于 v
的字符。您确定要删除字母 v
吗?或者说 v
是一个特殊符号,这里显示不正确?
如果要检查哪些元素不是数字,可以使用.str.isnumeric()
来检查:
df['var_a'].loc[~df['var_a'].str.isnumeric()]
如果您确定应该删除浮点字符以外的字符,您可以使用以下方法删除除 0-9
和 .
以外的字符:
df.var_a = df.var_a.str.replace(r'[^0-9.]', '', regex=True)
答案 1 :(得分:0)
试试这个:
df.var_a = df.var_a.str.replace(r'\\x', '')