同时使用 f-string 和 raw string

问题描述

我有一个这样的数据框:

           p          q
0      jdkdn  01JAN2020
1  01JAN2020   hdk789dj
2      783i3  01FEB2020

我正在尝试将 01JAN2020 替换为 01-01-2020,基本上是将 alphabetical month name 替换为 numeric month number。我不知道这些 date 在哪里,意味着在任何列和任何行中。我试图通过仅使用 df.replace 来做到这一点,但原始字符串有问题,我也想使用 f-string。 这是我的尝试:

import pandas as pd
import re

df=pd.DataFrame({"p":["jdkdn","01JAN2020","783i3"],"q":["01JAN2020","hdk789dj","01FEB2020"]})

months = {'JAN': '01','FEB': '02'}
#All 12 months but for test I am using just 2

df.replace(r'(\d{2})('+'|'.join(months)+')(\d{4})',r"\1-"+

f"{{months[\\2]}}" # Here I am trying to do main things

+r"-\3",regex=True,inplace=True)
print(df)
"""
                       p                      q
0                  jdkdn  01-{months[JAN]}-2020
1  01-{months[JAN]}-2020               hdk789dj
2                  783i3  01-{months[FEB]}-2020
"""

fr"{{months[\\2]}}"
"""
                      p                     q
0                 jdkdn  01-{months[\2]}-2020
1  01-{months[\2]}-2020              hdk789dj
2                 783i3  01-{months[\2]}-2020
"""

rf"{months[\2]}" and rf"{months[\\2]}"
"""
SyntaxError: f-string expression part cannot include a backslash
"""

想法:
我们可以像 regex if 一样使用 (?(<month name>)<number>) 吗?pandas 中的任何函数都会检测到任何 01JAN2020 将其替换为 01-01-2020

预期输出为:

           p           q
0      jdkdn  01-01-2020
1 01-01-2020    hdk789dj
2      783i3  01-02-2020

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)