pythonic方法在数据框架中提取和替换文本



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)

相关内容

最新更新