2017-08-27 9 views
1

複数のcsvからデータを読み込み、いくつかのフィルタを適用してデータフレームにマージしています。 csvの元のデータは数値/分数のみです。パンダはそれらをフロートに変換しています。そうだけど、そのまま残すには1列しか必要ない。これを整数に変換するには、私は試しました:Pythonのパンダでfloatを整数と小数に選択的に変換する

df['PRICE']=df['PRICE'].astype(int) 

これは整数にとっては素晴らしい動作です。しかし、これもすべての小数を整数に変換しています。でも

1162.50 --> 1162 

私のようなものに変更する探しています、意味:事前に

1152.0 --> 1152 
1216.50 --> 1216.5 
1226.65 --> 1226.65 

おかげ

答えて

2

あなたはdtype=objectpd.DataFrameコンストラクタを使用してデータフレームを再初期化することができます

print(df) 

     Col1 
0 1152.00 
1 1216.50 
2 1226.65 

df = pd.DataFrame(df, dtype=object) 
print(df) 

     Col1 
0  1152 
1 1216.5 
2 1226.65 

または、1つの列であれば

df.Col1 = pd.Series(df.Col1, dtype=object) 
print(df) 

     Col1 
0  1152 
1 1216.5 
2 1226.65 

法定警告:は、データフレームで混合型を持つことはパンダ/ numpyのは、純粋な数値型のために提供するすべての最適化と高速化のメリットを殺すヴェールは、あなたがpd.Seriesコンストラクタを同じように使用することができます。保存するときにそうでない場合は、彼らが浮くために強要され、


上記の方法は、数値特性を保持するためのアプローチを概説していますが、CSVに保存したい場合は、文字列に変換し、切り捨てる必要があります。これは、あなたがそれを行う方法です:

+0

クイックヘルプありがとうございます。私はpythonのデータフレームで、望ましい出力を見ることができます。しかし、私がdf.to_csvを使ってこの変更されたdfをcsvに書き込むと、値はオブジェクトとしてではなくfloatとして保存されます。私はここで何か間違っていますか?ご案内ください。 – user3017186

+0

役立つならば、私は元のフォーマットを1列分だけ維持する必要があります。なぜなら、これには別の列が追加されなければならないからです。 データ操作が無効になるので、残りの列がfloatに変換されます。 – user3017186

+0

@ user3017186残念ながら、 'df.to_csv'は現在これをサポートしていません。列はint、string、またはfloatのいずれかに強制変換されます。私の編集が表示されたら、私は文字列の操作を含む回避策を提供しました。それをチェックし、それが役に立ったと思うなら私の答えを受け入れてください。 –

関連する問題