Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/336.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 使用.str.replace()vs.replace()更新数据帧_Python_Pandas_Dataframe - Fatal编程技术网

Python 使用.str.replace()vs.replace()更新数据帧

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', '') 很好用。 这里有什么区别

我的pandas Dataframe df中有一列,其中包含一个字符串,该字符串后面有一些十六进制编码的空值(\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循环一样逐个遍历对象。