1524.449677
などの数値を含むcsvファイルがあります。小数点は常に正確に6桁です。
pandas read_csv
]を介してcsvファイル(および他の列)をインポートすると、列は自動的にデータ型object
を取得します。私の問題は、値が2470.6911370000003
実際には2470.691137
である必要があります。または、値2484.30691
は2484.3069100000002
と表示されます。
これは何らかの形でデータ型の問題のようです。 dtype
引数をread_csv
として指定することにより、{'columnname': np.float64}
を介してインポートするときにデータ型を明示的に指定しようとしました。それでも問題は消えませんでした。
インポートした値をソースのcsvファイルとまったく同じように取得するにはどうすればよいですか?
パンダは専用のdec 2 bin
速度よりも精度を犠牲にするコンバーター。
合格float_precision='round_trip'
からread_csv
これを修正します。
詳細は このページ をご覧ください。
データを処理した後、csvファイルに保存して戻す場合は、float_format = "%.nf"
を対応するメソッドに追加します。
完全な例:
import pandas as pd
df_in = pd.read_csv(source_file, float_precision='round_trip')
df_out = ... # some processing of df_in
df_out.to_csv(target_file, float_format="%.3f") # for 3 decimal places
私はこれが古い質問であることを理解していますが、多分これは他の誰かを助けるでしょう:
同様の問題がありましたが、同じ解決策を使用できませんでした。残念ながら、_float_precision
_オプションはCエンジンを使用する場合にのみ存在し、pythonエンジンを使用しない場合に存在します。したがって、python engine forその他の理由(たとえば、Cエンジンが正規表現リテラルを区切り文字として処理できないため)、この小さな「トリック」が私にとってうまくいきました:
_pd.read_csv
_引数で_dtype='str'
_を定義し、データフレームを任意のdtypeに変換します。 df = df.astype('float64')
。
ちょっとしたハックですが、うまくいくようです。誰かがこれをより良い方法で解決する方法について何か提案があれば、私に知らせてください。