【发布时间】:2022-01-11 03:21:58
【问题描述】:
我有一个数据框,在这个人的名字后面有几个 ' *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}}
【问题讨论】:
-
" 所以我的原始数据有些不同,粘贴到这里时会被删除。"那我们不可能帮你。 “在这种情况下,不确定如何帮助重现它。”当您尝试使用 Pandas 仅提取导致问题的行并从中创建一个 dict(在结果 DataFrame 或 Series 上使用
.to_dict)时会发生什么? -
顺便说一句,如果您只想匹配文字
*s,请不要使用那种正则表达式语法来转义这些符号;只是告诉熊猫不要使用正则表达式。也就是说,您得到了一个需要正则表达式的答案(基于猜测数据中的实际问题)。 -
@Ryan 您可以尝试将
df.to_dict()的输出添加到问题中吗?我很想知道你的数据有什么问题。 -
是的!这是法语文本中经常使用的细长、不间断的空格字符。我会更新我的答案。
-
抱歉@Ryan,我没有看到你的最后评论!
` characters aren't treated as literal` 字符。它们导致后面的一些字符被转义...阅读更多here。