i有一个包含用户提取的邮政编码的dataframe,其中许多不需要所需的格式,我需要使用Google Maps地理编码器API查找它们以获取关联的坐标。
我因此试图将其格式化以以'ig1 2bf','e6 2qa','rh10 4dg'之类的格式返回它们。
这有效,但很慢,我想有一种更多的" Pythonic"写作方式。有什么建议么?
df['postcode'] = df['postcode'].str.replace(" ", "").str.upper()
for i in range(0, df['postcode'].size):
if len(df['postcode'].iloc[i]) == 5:
df['postcode'].iloc[i] = df['postcode'].iloc[i][:2] + " " + df['postcode'].iloc[i][2:]
if len(df['postcode'].iloc[i]) == 6:
df['postcode'].iloc[i] = df['postcode'].iloc[i][:3] + " " + df['postcode'].iloc[i][3:]
if len(df['postcode'].iloc[i]) == 7:
df['postcode'].iloc[i] = df['postcode'].iloc[i][:4] + " " + df['postcode'].iloc[i][4:]
提供了一些被送入for循环的示例数据:
1 E176PA
2 S8 0ZW
3 DT29BU
4 S44 5TE
5 HP17 9TN
6 N12 0QF
7 S25 1YT
8 OX13 6AP
只有1和3行的格式。
不确定这是" Pythonic",但是看到英国第二个邮政编码的第二块总是由3个字符组成,您可以使用该事实将字符串切成薄片:
def format_postcode(postcode):
postcode = postcode.replace(" ", "").upper()
return "{} {}".format(postcode[:-3], postcode[-3:])
在这里, postcode[:-3]
从第一个到第四个字符, postcode[-3:]
从第三到最后一个字符。
您可以将功能应用于数据框的列:
df['postcode'].apply(format_postcode)