我使用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"?
答案 0 :(得分:5)
作为解决方法,您可以使用Series.str.zfill
将int
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