1

我有一个 DF,其中有一列专门用于邮政编码。邮政编码都搞砸了,我想清理该列,以便所有邮政编码都采用正确的 5 位数格式。

df1 =

    ZIP CODE  
0    35481  
1    45481  
2    881 
3    4074
4    8831-1591

我希望它们的格式如下:

    ZIP CODE  
0    35481  
1    45481  
2    08810 
3    04074
4    08831

我创建了一个函数,以便您可以加载任何系列并修复邮政编码问题。

这是我写的:

def fix_zip(series):
      return series.astype(str).str.replace('[^\w\s]', '').str.zfill(5)

它适用于大多数邮政编码,除了我无法让邮政编码以“0”开头,而是将 0 放在末尾。

所以例如我会得到 40740 而不是 04074

感谢您的关注!

4

1 回答 1

2

您可以通过以下方式获得第一个连续数字extract

def fix_zip(series):
      return series.astype(str).str.extract('(\d+)', expand=False).str.zfill(5)

df['new'] = fix_zip(df['ZIP CODE'])
print (df)
   ZIP CODE    new
0      35481  35481
1      45481  45481
2        881  00881
3       4074  04074
4  8831-1591  08831

或者像这样的拆分:

def fix_zip(series):
      return series.astype(str).str.split('-').str[0].str.zfill(5)

如果需要处理长度不同的值,这里在0前后加一个0

def fix_zip(series):
      s =  series.astype(str).str.extract('(\d+)', expand=False)
      return s.str.zfill(5).mask(s.str.len().eq(3), '0' + s + '0')

df['new'] = fix_zip(df['ZIP CODE'])
print (df)
    ZIP CODE    new
0      35481  35481
1      45481  45481
2        881  08810
3       4074  04074
4  8831-1591  08831
于 2021-02-17T06:37:01.153 回答