如何从熊猫数据框中排除特殊字符“\x”?

时间:2021-06-16 07:56:35

标签: python pandas

在我的输入数据中,似乎当收集数据的记录器以低功耗运行时,它会引入一些特殊字符,例如“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”?

2 个答案:

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

编辑2

如果您确定应该删除浮点字符以外的字符,您可以使用以下方法删除除 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', '')