Python:在单元格内的字符串中添加0/0

Python:在单元格内的字符串中添加0/0,python,regex,excel,pandas,Python,Regex,Excel,Pandas,我在单元格中有以下示例数据: EmployeeID 2016-CT-1028 2016-CT-1028 2017-CT-1063 2017-CT-1063 2015-CT-948 2015-CT-948 所以,我的问题是如何在2015-CT-948数据中添加0到 像这样做2015-CT-0948。 我尝试了以下代码: pattern = re.compile(r'(\d\d+)-(\w\w)-(\d\d\d)') newlist = list(filter(pattern.match, id

我在单元格中有以下示例数据:

EmployeeID

2016-CT-1028
2016-CT-1028
2017-CT-1063
2017-CT-1063
2015-CT-948
2015-CT-948
所以,我的问题是如何在2015-CT-948数据中添加0到 像这样做2015-CT-0948。 我尝试了以下代码:

pattern = re.compile(r'(\d\d+)-(\w\w)-(\d\d\d)')
newlist = list(filter(pattern.match, idList))

只是为了获得匹配的正则表达式模式,然后用zfill添加0,但它不起作用。拜托,有人能告诉我怎么做吗。不管怎样,我都可以用正则表达式或熊猫来做。谢谢大家!

这是一种使用zfill的方法

例:

输出:


使用pandas,可以使用split而不是regex解决:

df['EmployeeID'].apply(lambda x: '-'.join(x.split('-')[:-1] + [x.split('-')[-1].zfill(4)]))

如果严格定义了id的格式,您还可以使用简单的列表理解来完成此工作:

ids = [
'2017-CT-1063',
'2015-CT-948',
'2015-CT-948'
]

new_ids = [id if len(id) == 12 else id[0:8]+'0'+id[8:] for id in ids]
print(new_ids) 
# ['2017-CT-1063', '2015-CT-0948', '2015-CT-0948']
这是一条单行线:

df['EmployeeID'].apply(lambda x: '-'.join(xi if i != 2 else '%04d' % int(xi) for i, xi in enumerate(x.split('-'))))
在熊猫中,你可以使用


如果你所有答案中有3个是正确的呢?我必须选择哪一个是正确答案吗?可能重复的
ids = [
'2017-CT-1063',
'2015-CT-948',
'2015-CT-948'
]

new_ids = [id if len(id) == 12 else id[0:8]+'0'+id[8:] for id in ids]
print(new_ids) 
# ['2017-CT-1063', '2015-CT-0948', '2015-CT-0948']
df['EmployeeID'].apply(lambda x: '-'.join(xi if i != 2 else '%04d' % int(xi) for i, xi in enumerate(x.split('-'))))
df['EmployeeID'] = df.EmployeeID.str.replace(r'-(\d{3})$', r'-0\1', regex=True)


# Output:

0    2016-CT-1028
1    2016-CT-1028
2    2017-CT-1063
3    2017-CT-1063
4    2015-CT-0948
5    2015-CT-0948
Name: EmployeeID, dtype: object