我想修复pandas系列中的某些字符串条目,以便所有模式为'0x.202'(年份的最后一位数字丢失)的值都将在末尾附加一个零(因此它是完整日期)格式为“ mm.yyyy”)。这是我得到的模式:
pattern = '\d*\.202(?:$|\W)'
精确匹配由点分隔的2位数字,最后精确匹配202。您能否在保留原始索引的同时,帮助我如何替换串联的字符串?
我目前的方法是:
date = df['Calendar Year/Month'].astype('str')
pattern = re.compile('\d*\.202(?:$|\W)')
date.str.replace(pattern, pattern.pattern + '0', regex=True)
但是我得到一个错误:
error: bad escape \d at position 0
编辑:抱歉,由于缺少详细信息,我忘了提及熊猫将日期误认为是浮游物,所以这就是为什么未完全显示2020年的日期的原因(例如,5.2020舍入为5.202)。所以我用的表情是:
date = df['Year/Month'].astype('str')
date = date.apply(lambda _: _ if _[-1] == '1' or _[-1] == '9' else f'{_}0')
仅编辑“ xx.202”,而省略“ xx.2021”和“ xx.2019”之类的日期。谢谢大家的帮助!
答案 0 :(得分:0)
您必须在这里使用正则表达式吗?如果不是这样,它将起作用(如果字符串的长度为x,则添加0。)
df["Calendar Year/Month"].apply(lambda _: _ if len(_)==7 else f'{_}0')
或者也许是这样(如果最后一位是2,则添加0):
df["Calendar Year/Month"].apply(lambda _: _ if _[-1] == 0 else f'{_}0')
答案 1 :(得分:0)
我会做一个str.replace
:
df = pd.DataFrame({'Year/Month':['10.202 abc', 'abc 1.202']})
df['Year/Month'].str.replace(r'(\d*\.202)\b', r'\g<1>0')
输出:
0 10.2020 abc
1 abc 1.2020
Name: Year/Month, dtype: object