删除数据框列中的特定字符组合?

Remove specific combination of characters in dataframe colum?

我遇到以下问题,我有一些数据需要删除特定的字符组合,例如:

data_col
*.test1.934n
test1.tedsdh
*.test1.test.sdfsdf
jhsdakn
*.test2.test

我需要删除的是“*”存在的所有实例。数据框中的字符组合。到目前为止我已经尝试过:

df['data_col'].str.replace('^*.','')

然而,当我 运行 代码时,它给我这个错误:

re.error: 位置 1 无重复内容

关于如何解决这个问题有什么建议吗?提前致谢。

pandas 版本 1.4.2 或更早版本中 .str.replace 的默认行为是将替换模式视为正则表达式。如果您使用正则表达式来匹配具有特殊含义的字符,例如 *. 您必须使用反斜杠对它们进行转义:

df['data_col'].str.replace(r'^\*\.', '', regex=True)

请注意,我使用 raw string literals 来确保反斜杠按原样处理。我还添加了 regex=True,否则 pandas 会抱怨将来它不会将模式视为正则表达式。由于 ^ 开头,此正则表达式将只匹配每个字符串的开头。

但是,在这种特殊情况下,您也可能根本不需要正则表达式。

如果您想删除字符串中 *. 的任何实例(不仅是开头的),您可以使用

df['data_col'].str.replace('*.', '', regex=False)

如果你只想删除字符串开头的 *. 实例,你可以使用 .removeprefix 代替:

df['data_col'].str.removeprefix('*.')