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

时间:2018-10-16 05:58:28

标签: python regex excel pandas

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

EmployeeID

2016-CT-1028
2016-CT-1028
2017-CT-1063
2017-CT-1063
2015-CT-948
2015-CT-948

所以,我的问题是如何在数据0中添加2015-CT-948到 使其像这样2015-CT-0948。 我尝试了这段代码:

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

只是要获取匹配的正则表达式模式,然后将0zfill()添加在一起,但是它不起作用。拜托,有人可以给我一个想法,我该怎么做。无论如何,我可以在正则表达式或熊猫中做到这一点。谢谢!

5 个答案:

答案 0 :(得分:4)

这是使用args.Add("@Clerk", sample.Clerk, DbType.String); args.Add("@Comments", sample.Comments, DbType.String); args.Add("@CommentsProd", sample.CommentsProd, DbType.String); args.Add("@MassOff", sample.MassOff, DbType.String); args.Add("@PalletID", sample.PalletID, DbType.String); args.Add("@QCDate", sample.QCDate, DbType.Date); args.Add("@QtyInspected ", sample.QtyInspected, DbType.Decimal); args.Add("@StatusClerk", sample.StatusClerk, DbType.String); args.Add("@StatusSupervisor", sample.StatusSupervisor, DbType.String); args.Add("@Supervisor", sample.Supervisor, DbType.String); args.Add("@PackOut", sample.PackOut, DbType.String); args.Add("@GRV", sample.GRV, DbType.Int64); args.Add("@PalletSeq", sample.PalletSeq, DbType.Int16); args.Add("@SampleNo", sample.SampleNo, DbType.Int16);

的一种方法

例如:

$str = "AbCdE";

preg_match_all("/[A-Z]/", $str); // 3

输出:

zfill

答案 1 :(得分:2)

使用大熊猫可以用split而不是正则表达式来解决:

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

答案 2 :(得分:2)

在熊猫中,您可以使用from this link

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

答案 3 :(得分:1)

如果严格定义了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']

答案 4 :(得分:1)

这是一个班轮:

df['EmployeeID'].apply(lambda x: '-'.join(xi if i != 2 else '%04d' % int(xi) for i, xi in enumerate(x.split('-'))))