我正在尝试通过Pandas读取csv文件。
pd.read_csv('zip_mapping.gz',compression='gzip' ,header=None, sep=',')
但不知怎的,我在zip中读到了float,就像
一样 0 501.0
1 1220.0
2 1509.0
3 1807.0
4 2047.0
因为我不知道zip在我读入数据之前的哪一列,所以我无法在pd.read_csv中设置dtype。
我想将zip更改为int,但由于缺少值,我“无法将NA转换为int”错误。
尝试
str(zip).rstrip('0').rstrip('.')
但得到了这个
'0 501.0\n1 1220.0\n2 1509.0\n3 1807.0\n4 2047.0\nName: zip, dtype: float64'
其实我想把float中的zip转换成str就好了 501,1220,1509,1807,2047 然后我可以进一步填充前导零。
有什么建议吗? 谢谢。
答案 0 :(得分:2)
您可以使用Series.astype
方法将float转换为int然后转换为字符串,这里我使用df
来引用您从csv和df.zip
读取的数据框以引用 zip 列(相应调整):
df.zip.astype(int).astype(str).str.zfill(5)
#0 00501
#1 01220
#2 01509
#3 01807
#4 02047
#Name: zip, dtype: object
如果列中有NA,并且您希望保持原样:
df['zip'] = df.zip.dropna().astype(int).astype(str).str.zfill(5)
df
# zip
#0 NaN
#1 01220
#2 01509
#3 01807
#4 02047
另一个选项是使用字符串格式化程序:
df.zip.apply(lambda x: x if pd.isnull(x) else "{:05.0f}".format(x))
#0 NaN
#1 01220
#2 01509
#3 01807
#4 02047
#Name: zip, dtype: object