首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >大熊猫数据帧列中如何捕获和替换regex

大熊猫数据帧列中如何捕获和替换regex
EN

Stack Overflow用户
提问于 2022-03-08 08:52:20
回答 2查看 48关注 0票数 0

我试图在包含日期的DataFrame列中捕获和替换regex,我希望在文本“YYYY DD”中捕获以下日期格式--似乎我用于捕获和替换的语法是正确的,但有些方法是不工作的。

代码语言:javascript
运行
复制
lst_date_version = ["2021-10-10 rev. 002", "2021-11-28 rev. 003", "2021-09-27 rev. 008","2021-11-29 rev. 008", "2021-10-16 rev. 003", "2021-10-25 rev. 008","2021-11-03 rev. 003", "2021-04-12 rev. 008", "2021-03-19 rev. 004"]
df_test_date = pd.DataFrame({"Version":lst_date_version})
df_test_date["Version"] = df_test_date["Version"].str.replace(r"(\d{4}-\d{2})-(\d{2})", r"\1", regex=True)
print(df_test_date["Version"])

结果,日期格式的日期似乎被删除(2021-10-10 Rev.002 ==> 2021-10 Rev.002):

代码语言:javascript
运行
复制
0    2021-10 rev. 002
1    2021-11 rev. 003
2    2021-09 rev. 008
3    2021-11 rev. 008
4    2021-10 rev. 003
5    2021-10 rev. 008
6    2021-11 rev. 003
7    2021-04 rev. 008
8    2021-03 rev. 004

但当我做以下事情时:

代码语言:javascript
运行
复制
 df_test_date["Version"] = df_test_date["Version"].str.replace(r"(\d{4}-\d{2})-(\d{2})", r"\0", regex=True)
    print(df_test_date["Version"])

结果是:

代码语言:javascript
运行
复制
0     rev. 002
1     rev. 003
2     rev. 008
3     rev. 008
4     rev. 003
5     rev. 008
6     rev. 003
7     rev. 008
8     rev. 004

与此同时,我找到了与我想要实现的目标不同的方法(反转捕获):

代码语言:javascript
运行
复制
 df_test_date["Version"] = df_test_date["Version"].str.replace(r"(\srev.+)", r"\0", regex=True))

非常感谢您的提前帮助:)

PS:根据备注修改了问题:)

EN

回答 2

Stack Overflow用户

发布于 2022-03-08 08:54:08

您的代码失败,因为(\d{4}-\d{2})-(\d{2})永远不匹配。

你可以用str.splitn=1

代码语言:javascript
运行
复制
df_test_date['Version'] = df_test_date['Version'].str.split(n=1).str[1]

否则,将正则表达式更改为\d{4}-\d{2}-\d{2}\s*

代码语言:javascript
运行
复制
df_test_date['Version'] = df_test_date["Version"].str.replace(r"\d{4}-\d{2}-\d{2}\s*",
                                    '', regex=True)
票数 2
EN

Stack Overflow用户

发布于 2022-03-08 08:55:58

我会在这里使用str.extract

代码语言:javascript
运行
复制
df_test_date["Version"] = df_test_date["Version"].str.extract(r'^(\d{4}-\d{2}-\d{2})')

如果要使用str.replace,则使用与整个输入匹配的模式:

代码语言:javascript
运行
复制
df_test_date["Version"] = df_test_date["Version"].str.replace(r'^(\d{4}-\d{2}-\d{2}) rev\. \d+$', r'\1')
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71392278

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档