#はじめに
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で比較すると桁数の多いデータがところどころ食い違っている。
#対応
はっきりとした原因を突き詰めたわけではないが、Pandas内部でfloatに変換される際に桁落ち等が発生しているものと推測。したがって、read_csvの引数にdtype="object"をつけて型変換されないようにする。これで完全に一致するようになる。
df = pd.read_csv(args.input, index_col=0, dtype=object)