Python 使用.str.replace()vs.replace()更新数据帧
我的pandas Dataframe df中有一列,其中包含一个字符串,该字符串后面有一些十六进制编码的空值(\x00)。至少我认为是这样。当我试图用以下内容替换它们时:Python 使用.str.replace()vs.replace()更新数据帧,python,pandas,dataframe,Python,Pandas,Dataframe,我的pandas Dataframe df中有一列,其中包含一个字符串,该字符串后面有一些十六进制编码的空值(\x00)。至少我认为是这样。当我试图用以下内容替换它们时: df['SOPInstanceUID'] = df['SOPInstanceUID'].replace('\x00', '') 该列未更新。当我对你做同样的事情时 df['SOPInstanceUID'] = df['SOPInstanceUID'].str.replace('\x00', '') 很好用。 这里有什么区别
df['SOPInstanceUID'] = df['SOPInstanceUID'].replace('\x00', '')
该列未更新。当我对你做同样的事情时
df['SOPInstanceUID'] = df['SOPInstanceUID'].str.replace('\x00', '')
很好用。
这里有什么区别?(SOPInstanceUID不是索引。)
感谢前者查找字符串中的任何部分的匹配项,这就是为什么后者适用于您
str
方法与标准的string
等效方法同义,但是是矢量化的您没有指定正则表达式或要求精确匹配,因此str.replace有效
str.replace(old, new[, count])
返回一个字符串的副本,其中所有出现的子字符串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:与_replace完全匹配的字符串将被替换为值
正则表达式:与_replace匹配的正则表达式将替换为值
它们实际上不在字符串中:您有未替换的控制字符,Python使用十六进制表示法显示这些字符:
按以下方式删除所有非单词字符:
re.sub(r'[^\w]', '', '\x00\x00\x00\x08\x01\x008\xe6\x7f')
好的,谢谢你们两位。但是当我像这样调用replace时,
code
df['SOPInstanceUID'].replace('\x00','')code
我得到的字符串后面没有空值!?那么,它似乎是匹配的,还是只是som类型的输出格式没有显示空值?您需要发布原始数据和代码来演示这一点,而且您的注释与您的问题陈述相矛盾,因为它不起作用是的,抱歉。注意:当我调用该方法而不将其赋值回列时,我将得到一个jupyter格式的字符串输出,而不带尾随的null。当在我的帖子中分配时,什么也没有发生。卡马里先生,谢谢。那是缺失的部分!我不太明白,但我会尽力的。不是OP,但谢谢你提供的信息。这只是一个愚蠢的问题,你这里的向量化是什么意思?@BowenLiu Vectoriad在这里的意思是,我们不是一次对一行或一个值进行操作,而是对整个列进行操作(尽管实际上它实际上意味着多个值),所以它非常快。谢谢你的解释。所以它可以同时对多个值进行操作,从而节省计算时间?@BowenLiu正确的矢量化是我认为您应该使用numpy或pandas的原因。否则,它只是一个花哨的数据结构,使索引更容易,而没有任何性能提升!我从未想过使用pandas和numpy进行数据处理的原因。我之所以使用它,是因为每个人都在使用它,而且它有很多有用的功能。但是这些函数之所以能够快速有效地工作,是因为它们将所有数据矢量化了?你能用外行的语言解释一下它是如何做到的吗?我一直认为它像for循环一样逐个遍历对象。