问题描述
我有一个这样的数据框:
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 (将#修改为@)