在 Dataframe 中提取和替换文本的 Pythonic 方法

Pythonic way to extract and replace text in Dataframe

我有一个包含用户提交的邮政编码的数据框,其中许多不是所需的格式我需要使用 Google 地图地理编码器 API 查找它们以获得相关联纵坐标。

因此我尝试将其格式化为 return 它们的格式如 '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]从第一个字符到第4个字符,postcode[-3:]从第3个字符到最后一个字符。

然后您可以将该函数应用于 DataFrame 的列:

df['postcode'].apply(format_postcode)