替换 pandas 数据框列中的子字符串

Fel*_*lix 2 replace substring dataframe pandas

我正在使用包含名为“raw_parameter_name”的列的数据框。在本列中,我有不同的字符串值。有几个值类似于以下模式“ABCD;MEAN”。我想做的是将每个值“ABCD;MEAN”替换为“ABCD;X-BAR”。子字符串“ABCD”可能会有所不同,但模式“;MEAN”是我想要替换的常量。使用“替换”方法研究了不同的选项,但不知道如何仅替换子字符串而不是整个字符串。请指教。先感谢您

EdC*_*ica 5

用于str.contains创建布尔索引来屏蔽该系列,然后str.replace替换您的子字符串:

\n\n
In [172]:\ndf = pd.DataFrame({\'raw_parameter_name\':[\'ABCD;MEAN\', \'EFGH;MEAN\', \'1234;MEAN\', \'sdasd;MEAT\']})\ndf\n\nOut[172]:\n  raw_parameter_name\n0          ABCD;MEAN\n1          EFGH;MEAN\n2          1234;MEAN\n3         sdasd;MEAT\n\nIn [173]:\ndf.loc[df[\'raw_parameter_name\'].str.contains(\';MEAN$\'), \'raw_parameter_name\'] = df[\'raw_parameter_name\'].str.replace(\'MEAN\', \'X-BAR\')\ndf\n\nOut[173]:\n  raw_parameter_name\n0           ABCD;X-BAR\n1           EFGH;X-BAR\n2           1234;X-BAR\n3         sdasd;MEAT\n
Run Code Online (Sandbox Code Playgroud)\n\n

这里它匹配 substrin\';MEAN\'存在的位置$,是一个终止符号

\n\n

布尔掩码如下所示:

\n\n
In [176]:\ndf[\'raw_parameter_name\'].str.contains(\';MEAN$\')\n\nOut[176]:\n0     True\n1     True\n2     True\n3    False\nName: raw_parameter_name, dtype: bool\n
Run Code Online (Sandbox Code Playgroud)\n\n

时间安排

\n\n

对于 40,0000 行 df 使用str.replace比使用更快apply

\n\n
In [183]:\nimport re\n%timeit df[\'raw_parameter_name\'].apply(lambda x: re.sub(\';MEAN$\',\';X-BAR\',x))\n%timeit df[\'raw_parameter_name\'].str.replace(\'MEAN\', \'X-BAR\')\n\xe2\x80\x8b\n1 loops, best of 3: 1.01 s per loop\n1 loops, best of 3: 687 ms per loop\n
Run Code Online (Sandbox Code Playgroud)\n