【发布时间】:2021-10-01 23:59:34
【问题描述】:
我有一个这样的数据框:
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
"""
想法:
我们可以像(?(<month name>)<number>) 一样使用regex if 吗?pandas 中任何可以检测到任何01JAN2020 的函数都将其替换为01-01-2020。
预期输出为:
p q
0 jdkdn 01-01-2020
1 01-01-2020 hdk789dj
2 783i3 01-02-2020
【问题讨论】:
标签: python regex pandas f-string rawstring