2016-04-28 7 views
3

私はパンダのデータフレームに読み込もうとしているテキストファイルに以下のフォーマットのファイルを持っています。パンダでread_csvを使用している間に精度が失われる

895|2015-4-23|19|10000|LA|0.4677978806|0.4773469340|0.4089938425|0.8224291972|0.8652525793|0.6829942860|0.5139162227| 

あなたが入力ファイルの浮動小数点後整数がある見ることができるように。私はデータフレームにそれを読んしようとすると

df = pd.read_csv('mockup.txt',header=None,delimiter='|') 

、私はどのように私は、入力ファイルに存在するような完全な精度を得ることができます

df[5].head() 

0 0.467798 
1 0.258165 
2 0.860384 
3 0.803388 
4 0.249820 
Name: 5, dtype: float64 

最後の4つの整数を得ていないのですか?私は文字列としてキャストできないように実行する必要があるいくつかの行列演算を持っています。

私はdtypeについて何かしなければならないと分かりましたが、私はそれをどこで使うべきかわかりません。

答えて

9

それはdocs参照、表示のみの問題です:

#temporaly set display precision 
with pd.option_context('display.precision', 10): 
    print df 

    0   1 2  3 4    5   6    7 \ 
0 895 2015-4-23 19 10000 LA 0.4677978806 0.477346934 0.4089938425 

      8    9   10   11 12 
0 0.8224291972 0.8652525793 0.682994286 0.5139162227 NaN  

EDIT:(Mark Dickinsonありがとう):

パンダがために完璧な精度を犠牲に専用の小数ツーバイナリコンバータを使用しますスピードのために。 read_csvにfloat_precision='round_trip'を渡すとこれが修正されます。詳細については、documentationを参照してください。

+0

ありがとうございました。他に1人の新人質問があった。データがほとんど浮動小数点値であるときにread_csv()を使用している間、データフレームへの読み込みを高速化するための一般的な推奨事項はありますか? –

+0

私は 'dtypes'、[see](http://stackoverflow.com/q/15210962/2901002)を試してみるといいと思います。 – jezrael

+4

これは、純粋に*表示上の問題ではないことに注意する価値があります.Pandasを使用してデータフレームをCSVファイルに書き込んだり、再度読み込んだりすると、小さな浮遊結果のポイントエラー:Pandasは、スピードのために完全な精度を犠牲にする専用の10進 - バイナリコンバータを使用しています。 float_precision = 'round_trip''を 'read_csv'に渡すことでこれが修正されます。詳細については、[documentation](http://pandas.pydata.org/pandas-docs/stable/io.html#specifying-method-for-floating-point-conversion)を参照してください。 –

関連する問題