python将float转换为string

时间:2017-03-08 22:03:59

标签: python string

我正在尝试通过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 然后我可以进一步填充前导零。

有什么建议吗? 谢谢。

1 个答案:

答案 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