python - Python 中使用 Pandas.series.str.contains 进行字符串替换的模式匹配错误
问题描述
我正在尝试用从包含多组括号的字典中提取的字符串替换熊猫数据框中的字符串。运行脚本时,我收到匹配组错误,并且字符串未被替换。我相当有信心这个错误是由括号引起的。
为了解决这个问题,我一直在尝试使用 str.contains() 方法使用正则表达式模式匹配。我已经查看了 stackoverflow 上提供的其他解决方案,但未能成功解决我的错误。
这是我用于测试目的的一些脚本。在字符串中保留括号很重要(即我不必删除它们):
import pandas as pd
import numpy as np
dict= {'2017() (pat)':'2000',
'2018() (pat)':'2001'}
df = pd.DataFrame({'YEAR': ['test2017end','test2018end','test2019end'],
'MONTH': ['Jan','Feb','Mar'],
'DD': ['1','12','22']})
for init, repl in dict.items():
df.loc[df['YEAR'].str.contains(init),'YEAR'] = repl
print(df)
有人可以提供有关使用模式匹配的指导,以便正确替换字符串吗?
谢谢!
解决方案
不要使用变量dict
,因为 python 代码关键字。
解决方案是提取字典键中的第一个整数:
import re
d= {'2017() (pat)':'2000',
'2018() (pat)':'2001'}
df = pd.DataFrame({'YEAR': ['test2017end','test2018end','test2019end'],
'MONTH': ['Jan','Feb','Mar'],
'DD': ['1','12','22']})
for init, repl in d.items():
i = re.findall('\d+', init)[0]
df.loc[df['YEAR'].str.contains(i),'YEAR'] = repl
print(df)
YEAR MONTH DD
0 2000 Jan 1
1 2001 Feb 12
2 test2019end Mar 22
推荐阅读
- c++ - Exit(0) 不结束程序
- scala - 在 guice 模块中获取运行微服务的端口
- drupal - 如何使用树枝检查菜单项是否包含单词
- cmake - Find_library 使用不同版本的 cmake 失败
- java - Java继承与实现
- c - C99 递归矩阵乘法。如何访问索引?
- c# - 如何根据断言方法结果 webdriver C# 通过或失败测试?
- javascript - 使用 vanilla javascript 在引导模型中显示来自输入和选择字段的信息
- mysql - 数据过多时元查询不返回任何内容
- c# - 在 SpecFlow 3 生命周期挂钩中使用 SimpleInjector 范围