用正则表达式修改熊猫列

时间:2020-06-08 12:56:06

标签: python database pandas re

我想修复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”之类的日期。谢谢大家的帮助!

2 个答案:

答案 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