Pandas .str.replace 不替换 table 中的所有实例
Pandas .str.replace not replacing all instances in a table
我有一个数据框,在这个人的名字后面有几个 ' *Winner*'
的实例。我想删除它,所以只保留他们的名字。下面是一个简化版本:
Data = {'YEAR': [2020, 2020, 2020],
'NAME': [ 'Tom *Winner*', 'Dick *Winner*', 'Harry *Winner*']}
df = pd.DataFrame(Data)
df['NAME'] = df['NAME'].str.replace(' [*]Winner[*]', '')
df
结果是:
YEAR NAME
0 2020 Tom
1 2020 Dick *Winner*
2 2020 Harry
所以我的问题是 Dick 的 ' *Winner*'
标签与其他两个标签有何不同?为什么这个没有被删除?有没有更好的方法来完成这个?
作为一个额外的混乱说明,我只是复制了上面的代码并重新 运行 它(假设这就是这里的人可能测试它的方式)并且它确实删除了 Dick 的 ' *Winner*'
标签。所以我的原始数据有些不同,粘贴到这里时会被删除。在这种情况下不确定如何帮助重现它。
编辑: 根据@user17242583 的请求,这里是 df.to_dict()
的结果
{'NAME': {0: 'Tom *Winner*', 1: 'Dick\xa0*Winner*', 2: 'Harry *Winner*'},
'YEAR': {0: 2020, 1: 2020, 2: 2020}}
试试这个:
df['NAME'] = df['NAME'].str.replace('\s*\*Winner\*', '', regex=True)
输出:
>>> df
YEAR NAME
0 2020 Tom
1 2020 Dick
2 2020 Harry
之所以有效,是因为您的数据有 \xa0
,即 thin, non-breaking space。在您的原始代码中,您有一个 space 硬编码,但我的代码使用 \s*
表示“0 个或多个任何白色 space 字符”,其中包括 \xa0
(char代码 160).
我有一个数据框,在这个人的名字后面有几个 ' *Winner*'
的实例。我想删除它,所以只保留他们的名字。下面是一个简化版本:
Data = {'YEAR': [2020, 2020, 2020],
'NAME': [ 'Tom *Winner*', 'Dick *Winner*', 'Harry *Winner*']}
df = pd.DataFrame(Data)
df['NAME'] = df['NAME'].str.replace(' [*]Winner[*]', '')
df
结果是:
YEAR NAME
0 2020 Tom
1 2020 Dick *Winner*
2 2020 Harry
所以我的问题是 Dick 的 ' *Winner*'
标签与其他两个标签有何不同?为什么这个没有被删除?有没有更好的方法来完成这个?
作为一个额外的混乱说明,我只是复制了上面的代码并重新 运行 它(假设这就是这里的人可能测试它的方式)并且它确实删除了 Dick 的 ' *Winner*'
标签。所以我的原始数据有些不同,粘贴到这里时会被删除。在这种情况下不确定如何帮助重现它。
编辑: 根据@user17242583 的请求,这里是 df.to_dict()
{'NAME': {0: 'Tom *Winner*', 1: 'Dick\xa0*Winner*', 2: 'Harry *Winner*'},
'YEAR': {0: 2020, 1: 2020, 2: 2020}}
试试这个:
df['NAME'] = df['NAME'].str.replace('\s*\*Winner\*', '', regex=True)
输出:
>>> df
YEAR NAME
0 2020 Tom
1 2020 Dick
2 2020 Harry
之所以有效,是因为您的数据有 \xa0
,即 thin, non-breaking space。在您的原始代码中,您有一个 space 硬编码,但我的代码使用 \s*
表示“0 个或多个任何白色 space 字符”,其中包括 \xa0
(char代码 160).