Python 在某些情况下,连接两列会在4位邮政编码前添加0

Python 在某些情况下,连接两列会在4位邮政编码前添加0,python,pandas,Python,Pandas,我有下面的代码,直到最近一直按预期工作 import pandas as pd import numpy as np file1 = "xyz.csv" df = pd.read_csv(file1) pd.options.display.float_format = '{:,.2f}'.format df.loc[~df['Ship To Customer Zip'].str.contains('[A-Za-z]'), 'ZipCleaned'] = df['Ship To Custom

我有下面的代码,直到最近一直按预期工作

import pandas as pd
import numpy as np
file1 = "xyz.csv"
df = pd.read_csv(file1)
pd.options.display.float_format = '{:,.2f}'.format  

df.loc[~df['Ship To Customer Zip'].str.contains('[A-Za-z]'), 'ZipCleaned'] = df['Ship To Customer Zip'].str.slice(stop=5)
df.loc[df['Ship To Customer Zip'].str.contains('[A-Za-z]'), 'ZipCleaned'] = df['Ship To Customer Zip'].str.replace(' |-','')

df['revenue'] = df['revenue'].replace('\$|,','', regex=True).replace('\(','-', regex=True).replace('\)','', regex=True)

df['Customer ID'] = df['Ship To Customer'] + df['ZipCleaned']
代码的目标是创建一个名为“Customer ID”的列,该列连接“Ship to Customer”和“ZipClean”列

问题:对于用户只输入了四个数字的邮政编码,在某些情况下,上面的最后一行代码会在邮政编码栏前面添加一个零(“0”),而在其他情况下则不会。我注意到,代码刚刚开始将前面的零添加到我数据库中最近几个月的数据中(数据可以追溯到几年前)。在邮政编码字段仅包含4位数字的情况下,我不希望在前面包含零

下面是数据帧的一个示例


我找到了解决这个问题的方法,但我不确定这是否是正确的方法。要删除邮政编码前面的零,我在下面的代码中添加了将字段转换为字符串的代码

df['ZipCleaned'] = df['ZipCleaned'].astype(str)

Max Power,为了回答您关于4位邮政编码的问题,当我在csv中保存数据时,它会将以“0”开头的邮政编码转换为5位数字,从而从中删除“0”(在某些情况下是这样做的,而在其他情况下则不会导致数据集不一致)

你能提供一个数据框的例子吗?请不要粘贴数据的图像,而是用代码将数据输入到数据框中。另外,由于您的问题是关于4位拉链的(尽管这与我对邮政编码的理解不符),因此您应该包括一些4位拉链,它们是或不是导致添加零。请参阅:抱歉,上面编辑了我的评论,但我拥有的数据是数十万行的csv。你想让我把它的一个样本放到代码中的一个数据框中吗?我建议用
df=pd.read\u csv(…)
替换为
df=pd.dataframe({…})
,并包括5-10行,其中至少有2-3行没有按照你想要的方式处理。你应该明确你的代码的输出不是你想要的,理想的情况是,通过提供
desired\u output\u df=pd.DataFrame({…})
的代码,我们可以将它与通过你给我们的
df
运行你的代码的结果进行比较,作为输入。对于你的4位数问题,我建议使用
pd.read\u csv(…),dtype={'ZipCleand':str})
如果您试图防止前导零被删除(这对于邮政编码来说是个好主意),您应该使用上面的pe perry代码将csv中的任何邮政编码数据字段作为字符串读取。不要将其读入(具有不明确/不可预测的类型)然后将它们转换为字符串。不过,当你说你的问题是想要4位数的拉链,代码是加零时,我被你的问题中的下一行抛出:“对于用户只输入了四个数字的邮政编码,在某些情况下,上面的最后一行代码会加零(“0”)”