我希望将zip+4代码转换为pandas数据框架中的邮政编码。我希望它能识别邮政编码的存在,并只保留前5位数字。我想有效地执行下面的代码(尽管这在这种格式下不起作用):
df.replace('^(d{5}-?d{4})', group(1), regex=True)
下面的代码对列表执行相同的过程,我希望在数据框中执行相同的操作。
my_input = ['01234-5678', '012345678', '01234', 'A1A 1A1', 'A1A1A1']
expression = re.compile(r'^(d{5})-?(d{4})?$')
my_output = []
for string in my_input:
if m := re.match(expression, string):
my_output.append(re.match(expression, string).group(1))
else:
my_output.append(string)
可以使用
df = df.replace(r'^(d{5})-?d{4}$', r'1', regex=True)
参见regex演示。
细节:
^
-字符串 起始(d{5})
-第一组(1
):五位-?
-可选-
d{4}
-任意四位$
-字符串结束