在Python中,在邮政编码的第3个和第4个字符之间加一个空格。

问题描述 投票:-1回答:1

我在Python里有一个df(数据框架),其中有一个postal_code变量,里面有加拿大的邮政编码。所有的邮政编码都被收集在一行中,比如k1b6j2。但是,对于我来说,我需要使用'PGEOCODE'包,我需要标准形式的邮政编码,比如k1b 6j2 (第3和第4个字符之间必须有一个空格)

那么,有没有办法在df中用修改后的邮政编码来代替所有的邮政编码呢?

非常感谢,Ben

python geocoding data-cleaning postal-code
1个回答
1
投票

你可以简单地重新定义你所期望的列的格式。

import pandas as pd 
df = pd.DataFrame({'ID':[1,2,3,4],'postal_code':['k1b6j2','k1b6j3','k1b6j4','k1b6j5']}) ##Example dataset

   ID postal_code
0   1      k1b6j2
1   2      k1b6j3
2   3      k1b6j4
3   4      k1b6j5

重新定义 postal_code 以您想要的格式显示在列中。

df['postal_code'] = df['postal_code'].astype(str)
df['postal_code'] = [(x[:3]+" "+x[3:]) for x in df['postal_code']]

输出:

   ID postal_code
0   1     k1b 6j2
1   2     k1b 6j3
2   3     k1b 6j4
3   4     k1b 6j5

最后在一个100k长的数据框架中,与其他一些方法进行比较。

df['postal_code'] = [(x[:3]+" "+x[3:]) for x in df['postal_code']] 
First method time:  0.08260965347290039
df['postal_code'] = df["postal_code"].str[:3] + " " + df["postal_code"].str[3:]
Second method time:  0.112518310546875

1
投票

在pandas中,你可以使用 "apply "来实现你的需求。

df['postal_code'] = df['postal_code'].apply(lambda x:x[:3]+' '+x[-3:])

1
投票

另一种方法是使用 熊猫串支持 它有很多很好的方法来处理字符串,比如直接对字符串列进行切片。

>>> import pandas as pd
>>> df = pd.DataFrame({"index": range(10), "code": ["k1b6j2"]*10})
>>> df["postal_code"] = df["code"].str[:3] + " " + df["code"].str[3:]
>>> df
   index    code postal_code
0      0  k1b6j2     k1b 6j2
1      1  k1b6j2     k1b 6j2
2      2  k1b6j2     k1b 6j2
3      3  k1b6j2     k1b 6j2
4      4  k1b6j2     k1b 6j2
5      5  k1b6j2     k1b 6j2
6      6  k1b6j2     k1b 6j2
7      7  k1b6j2     k1b 6j2
8      8  k1b6j2     k1b 6j2
9      9  k1b6j2     k1b 6j2

0
投票

将此方法应用于df中的所有邮政编码。

code_with_space = code_without_space[:3] + " " + code_without_space[3:]

0
投票

怎么样:

pcode = 'k1b6j2'
pcode = pcode[:3] + ' ' + pcode[3:]
© www.soinside.com 2019 - 2024. All rights reserved.