2017-03-08 7 views
2

私はPandasからcsvファイルを読み込もうとしています。python floatを文字列に変換する

pd.read_csv('zip_mapping.gz',compression='gzip' ,header=None, sep=',') 

しかし、どういうわけか、私はデータを読み込む前に、ジッパーがどの列にあるかわからないように私は

0  501.0 
1 1220.0 
2 1509.0 
3 1807.0 
4 2047.0 

のように、floatとしてzipファイルに読んで、私はPDでDTYPEを設定することができませんでした.read_csv。

ジップを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' 

は、実際に私は、私はさらに先行ゼロをパディングでき、 501、1220、1509、1807年と同様にSTRに2047 をフロート内のzipを変換したいしまっをしようとしました

提案がありますか? ありがとうございます。

答えて

2

あなたは文字列に、ここで私はジップ列を参照するために、CSVから読み込むとdf.zipあなたのデータフレームを参照するためにdfを使用しています、その後intにfloat型に変換するためにSeries.astypeメソッドを使用することができます(それに応じて調整する):

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 

もう1つのオプションは文字列フォーマッタを使用します:

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 
+0

これは問題なく動作します。ありがとうございました。 – newleaf

+0

私はstr(zip)を使う理由について疑問を持っていますが、まだdtypeを 'float64'としています。 – newleaf

+0

ValueErrorを取得すると:NAを整数に変換できません – newleaf

関連する問題