Python 3.x 提取和替换数据帧中文本的Pythonic方法

Python 3.x 提取和替换数据帧中文本的Pythonic方法,python-3.x,pandas,postal-code,Python 3.x,Pandas,Postal Code,我有一个包含用户提交的邮政编码的数据框,其中许多邮政编码不是所需的格式,我需要使用Google Maps Geocoder API查找它们以获得相关坐标 因此,我尝试将其格式化,以像“IG1 2BF”、“E6 2QA”、“RH10 4DG”这样的格式返回它们 这是可行的,但速度很慢,我想有一种更“python”的方式来写这篇文章。有什么建议吗 df['postcode'] = df['postcode'].str.replace(" ", "").str.upper() for i in ran

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

因此,我尝试将其格式化,以像“IG1 2BF”、“E6 2QA”、“RH10 4DG”这样的格式返回它们

这是可行的,但速度很慢,我想有一种更“python”的方式来写这篇文章。有什么建议吗

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)
不确定这是否是“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)

请分享一些已完成的示例数据。希望这足够了你确定你需要担心格式问题吗?它通常很擅长算出它是一个邮政编码。。。如果它在某些情况下真的很困难,那么可能更容易提出每个请求:“,英国”,给它一个进一步的提示……请分享一些示例数据。希望这足够了你确定你需要担心格式问题吗?它通常很擅长算出它是一个邮政编码。。。如果它在某些情况下真的陷入困境,可能更容易提出每一个请求:“,英国”来给它一个进一步的暗示。。。