2024-09-30 10:27:22 发布
网友
我有一个Python中的df(数据帧),带有一个带有加拿大邮政编码的邮政编码变量。所有邮政编码都收集在一行中,如k1b6j2。但是,要使用“pgeocode”软件包,我需要标准格式的邮政编码,如k1b 6j2(第3和第4个字符之间必须有空格)
那么,有没有办法用df中修改过的邮政编码替换所有邮政编码
非常感谢,, 本
在熊猫中,您可以使用“应用”来满足您的需求
df['postal_code'] = df['postal_code'].apply(lambda x:x[:3]+' '+x[-3:])
您只需按照预期的格式重新定义列:
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列:
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
另一种方法是使用pandas string support,它有一系列很好的方法来处理字符串,例如字符串列的直接切片:
>>> 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
在熊猫中,您可以使用“应用”来满足您的需求
您只需按照预期的格式重新定义列:
按所需格式重新定义
postal_code
列:输出:
最后,与100k长度数据帧中的一些其他方法进行比较:
另一种方法是使用pandas string support,它有一系列很好的方法来处理字符串,例如字符串列的直接切片:
相关问题 更多 >
编程相关推荐