我的pandas Dataframe df中有一个列,其中包含一些字符串,其中包含一些尾随的十六进制编码的NULL(\ x00)。至少我认为是这样的。当我尝试用以下内容替换它们时:
df['SOPInstanceUID'] = df['SOPInstanceUID'].replace('\x00', '')
该列未更新。当我用
做同样的事情df['SOPInstanceUID'] = df['SOPInstanceUID'].str.replace('\x00', '')
它工作正常。
这有什么区别? (SOPInstanceUID不是索引。)
感谢
答案 0 :(得分:6)
前者查找exact matches,latter查找字符串任何部分的匹配项,这就是后者适合您的原因。
str
方法与标准string
等价物同义,但是已经过矢量化
答案 1 :(得分:1)
您没有指定正则表达式或要求完全匹配,因此str.replace工作
str.replace(old, new[, count])
返回字符串的副本,其中所有出现的substring old都替换为new。如果给出了可选参数计数,则仅替换第一次计数出现次数。
DataFrame.replace(to_replace=None, value=None, inplace=False, limit=None, regex=False, method='pad', axis=None)
parameter: to_replace : str, regex, list, dict, Series, numeric, or None
str或regex: str:完全匹配to_replace的字符串将替换为value 正则表达式:匹配to_replace的正则表达式将替换为值
他们实际上并不在字符串中:你有未转义的控制字符,Python使用十六进制表示法显示:
按以下方式删除所有非单词字符:
re.sub(r'[^\w]', '', '\x00\x00\x00\x08\x01\x008\xe6\x7f')