使用.str.replace()vs .replace()更新pandas DataFrame

时间:2016-06-30 07:50:24

标签: python pandas dataframe

我的pandas Dataframe df中有一个列,其中包含一些字符串,其中包含一些尾随的十六进制编码的NULL(\ x00)。至少我认为是这样的。当我尝试用以下内容替换它们时:

df['SOPInstanceUID'] = df['SOPInstanceUID'].replace('\x00', '')

该列未更新。当我用

做同样的事情
df['SOPInstanceUID'] = df['SOPInstanceUID'].str.replace('\x00', '')
它工作正常。 这有什么区别? (SOPInstanceUID不是索引。)

感谢

2 个答案:

答案 0 :(得分:6)

前者查找exact matcheslatter查找字符串任何部分的匹配项,这就是后者适合您的原因。

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')