Python - 将Zip代码作为字符串加载到DataFrame中?

时间:2015-10-15 00:04:05

标签: python excel pandas zipcode

我使用Pandas加载包含邮政编码的Excel电子表格(例如32771)。邮政编码在电子表格中存储为5位数字符串。使用命令...

将它们拉入DataFrame时
xls = pd.ExcelFile("5-Digit-Zip-Codes.xlsx")
dfz = xls.parse('Zip Codes')

他们被转换成数字。所以' 00501'变成501.

所以我的问题是,我该如何:

一个。加载DataFrame并保存存储在Excel文件中的邮政编码的字符串类型?

湾将DataFrame中的数字转换为五位数字符串,例如" 501"成为" 00501"?

4 个答案:

答案 0 :(得分:5)

作为解决方法,您可以使用Series.str.zfillint s转换为长度为5的0填充字符串:

df['zipcode'] = df['zipcode'].astype(str).str.zfill(5)

演示:

import pandas as pd
df = pd.DataFrame({'zipcode':['00501']})
df.to_excel('/tmp/out.xlsx')
xl = pd.ExcelFile('/tmp/out.xlsx')
df = xl.parse('Sheet1')
df['zipcode'] = df['zipcode'].astype(str).str.zfill(5)
print(df)

产量

  zipcode
0   00501

答案 1 :(得分:2)

str(my_zip).zfill(5)

print("{0:>05s}".format(str(my_zip)))

是许多方法中的两种

答案 2 :(得分:2)

您可以使用自定义转换器避免熊猫类型推断,例如:如果'zipcode'是带有zipcodes的列的标题:

dfz = xls.parse('Zip Codes', converters={'zipcode': lambda x:x})

这可能是一个错误,因为该列最初是字符串编码的,因此问题here

答案 3 :(得分:0)

已使用zfill(5)正确建议了先前的答案。但是,如果由于某种原因您的邮政编码已经在float数据类型中(我最近遇到这样的数据),则首先需要将其转换为int。然后,您可以使用zfill(5)

df = pd.DataFrame({'zipcode':[11.0, 11013.0]})
    zipcode
0   11.0
1   11013.0
df['zipcode'] = df['zipcode'].astype(int).astype(str).str.zfill(5)
    zipcode
0   00011
1   11013