提问人:pyphan 提问时间:11/10/2023 最后编辑:Maria Kpyphan 更新时间:11/10/2023 访问量:50
将前导零添加到 pandas 数据帧中小于 5 位数字的邮政编码
Adding leading zeros to zipcodes that are less than 5 digits in pandas dataframe
问:
我有一个 pandas 数据帧,其中包含一列邮政编码,我想在邮政编码中添加前导零,以便它们都有五位数字。
这是我使用的代码,它可以正确识别长度小于 5 位数字的值,但不添加前导零以使其长度为 5。它还会正确跳过带有空单元格的 5 位数字。这些值以浮点数的形式出现,因此我将它们转换为字符串。
这是我正在使用的代码:
df_tellall['zipcode'] = df_tellall['zipcode'].astype(str)
df_tellall['cleanzip'] = df_tellall['zipcode'].apply(lambda x: str(x).zfill(5) if len(str(x))<5 else "")
但它不会添加前导零。
邮政编码 | 清洁拉链 |
---|---|
67509 | |
4759 | 4759 |
任何帮助将不胜感激。
答:
1赞
Andrej Kesely
11/10/2023
#1
尝试:
# convert "zipcode" to string (if necessary):
df["zipcode"] = df["zipcode"].astype(str)
# cleanzip will become "" when length >= 5, otherwise fill it with leading zeros:
df["cleanzip"] = np.where(
df["zipcode"].str.len() < 5, df["zipcode"].str.zfill(5), ""
)
print(df)
指纹:
zipcode cleanzip
0 67509
1 4759 04759
评论
0赞
mozway
11/10/2023
它怎么不工作?它应该。
0赞
mozway
11/10/2023
您确定原始数字是从整数转换而来的,而不是用空格填充的吗?和 之间有区别吗?df["zipcode"].str.len()
df["zipcode"].str.strip().str.len()
1赞
pyphan
11/10/2023
所以它奏效了......但是,当文件发送到 Excel 中的 CSV 输出文件时,它会再次去掉前导零......不知道如何解决这个问题。对此的任何评论都会有所帮助。非常感谢!
0赞
Andrej Kesely
11/10/2023
@pyphan 这是 Excel 问题,请参阅例如:support.microsoft.com/en-us/office/...
0赞
pyphan
11/10/2023
非常感谢大家!爱SO。我希望有一种方法可以在 python 中覆盖它 - 我知道如何在 excel 中手动更正它。我还将尝试 xls 导出,看看结果是否相同。
评论
cleanzip
cleanzip