6
7

More than 3 years have passed since last update.

Pandasで微妙に数値が変わる現象とその対応

Last updated at Posted at 2020-02-08

はじめに

Pandasのread_csvでデータを読み込み、列名等を変更してto_csvで出力した場合に微妙に数値が変わってしまった時のメモ

ソース

以下が本記事のエッセンスを取り出した最小コードである。読んで吐き出すだけ。

PandasTest.py
import pandas as pd
import argparse


def main():

    parser = argparse.ArgumentParser()
    parser.add_argument("-input", type=str, required=True)
    parser.add_argument("-output", type=str, required=True)

    args = parser.parse_args()

    df = pd.read_csv(args.input, index_col=0)
    df.to_csv(args.output)


if __name__ == "__main__":
    main()

問題点

上のコマンドで変換した2つのファイルをWinMargeで比較すると桁数の多いデータがところどころ食い違っている。
image.png

対応

はっきりとした原因を突き詰めたわけではないが、Pandas内部でfloatに変換される際に桁落ち等が発生しているものと推測。したがって、read_csvの引数にdtype="object"をつけて型変換されないようにする。これで完全に一致するようになる。

   df = pd.read_csv(args.input, index_col=0, dtype=object)
6
7
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
6
7