在 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)
我有一个包含用户提交的邮政编码的数据框,其中许多不是所需的格式我需要使用 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)