2016-09-13 12 views
1

このエラーを避ける最も良い方法は何ですか?Pythonが整数を浮動小数点に変換する(Postgresデータベース)

DataError: invalid input syntax for integer: "669068424.0" CONTEXT: COPY sequence_raw, line 2, column id: "669068424.0"

各列のデータ型を指定したpgadminを使用してテーブルを作成しました。私はパンダでデータを読んで何らかの処理をしています。私は明示的に列のリストを提供し、それらが.astype(int)であると言うことができますが、それは必要ですか?

整数の後に.0がある理由は、データにNaNがあり、整数ではなく浮動小数点に変換されるためです。これを回避する最良の方法は何ですか?私はパンダのプレリリースで0.19を見ました。これは、まばらなデータのより良い取り扱いがあり、これは万が一カバーされていますか?

あなたはCSVでのフロートの形式を指定する to_csvため float_formatパラメータを使用することができます
def process_file(conn, table_name, file_object): 
    fake_conn = pg_engine.raw_connection() 
    fake_cur = fake_conn.cursor() 
    fake_cur.copy_expert(sql=to_sql % table_name, file=file_object) 
    fake_conn.commit() 
    fake_cur.close() 


df = pd.read_sql_query(sql=query.format(**params), con=engine) 
df.to_csv('../raw/temp_sequence.csv', index=False) 
df = open('../raw/temp_sequence.csv') 
process_file(conn=pg_engine, table_name='sequence_raw', file_object=df) 
+1

ですから、 'float'列を持つテーブルを持っていますが、それをエクスポートしたいですint列としてcsv?それはあなたが求めていることですか? – univerio

+1

これらはすべてint(秒数)です。ただし、NULLを持つ行があります。 Pythonまたはpandasは、NaN整数を処理しないため、これらの列を浮動小数点に変換します。列が整数として認識されるようにするには、0を入力する必要があります(これは無駄に思えますが、1日に約200万行、多くの行に空白があります)。 – trench

+1

あなたの正確な状況はまだかなり不明です。私が正しく理解しているかどうかを見てみましょう。 'int'カラムを使ってテーブルを手動で作成しましたが、CSVにエクスポートしようとすると何とか' float'カラムが返されますか? – univerio

答えて

1

df.to_csv('../raw/temp_sequence.csv', index=False, float_format="%d") 
関連する問題