

psycopg2でデータベースからSQLでデータを取得し、データフレーム化していますがその際欠損のあるbigint列がfloatになってしまいます。

Pandasで加工した後、DBに戻したいと考えているのですがfloatだとエラーが出てしまいます。

[code]

    ERROR:  invalid input syntax for type bigint
    
[/code]

整数値でも `.0` となっているのが原因のようです。  
すべて文字列で読むなど試みましたが、DBからデータフレームにする時点で `.0` がついてきてしまいどうしようもないです。

どのように対処すればよろしいでしょうか。  
よろしくお願いいたします。

**実行環境**  
Windows 10  
Python 3.7

**追記**  
データフレーム化するときに、`dtype=object`とすることで回避できました。  
また、  
`table.astype({'hoge': np.int64})`  
とすると  
`ValueError: invalid literal for int() with base 10:`  
となってしまいます。

コメントで頂いたInt64についても試している段階です。  
もう少しわかりましたら再度追記いたします。


CC BY-SA 4.0
2020-08-18T03:15:35.597
69646
2022-01-09T01:00:25.050
2020-08-18T12:55:16.567
12457
12457
question
python pandas
pandasで欠損により小数点がつく問題を回避したい


[欠損値NaNはfloat型](https://blog.amedama.jp/entry/2018/05/12/175309)として扱われます。  
NaNを[`fillna`](https://pandas.pydata.org/pandas-
docs/stable/reference/api/pandas.Series.fillna.html)で置換した上で[`astype`](https://pandas.pydata.org/pandas-
docs/stable/reference/api/pandas.DataFrame.astype.html)でキャストする方法が手っ取り早いです。  
なお単純に`astype`で置換すると `ValueError: Cannot convert non-finite values (NA or inf)
to integer` が発生します。  
[本家の関連質問](https://stackoverflow.com/q/47013973)

[code]

    import pandas as pd
    
    df = pd.DataFrame({ 'hoge' : [1, 2] })
    print(df)
    """ 
       hoge
    1     1
    2     2
    """ 
    
    df = df.reindex([0,1,2])
    print(df)
    """ 
       hoge
    1   1.0
    2   2.0
    3   NaN
    """ 
    
    # df['hoge'] = df['hoge'].astype('int64')
    # ValueError: Cannot convert non-finite values (NA or inf) to integer
    
    df['hoge'] = df['hoge'].fillna(0).astype('int64') # fillnaで置換した値はDBに戻すタイミングで再加工すること
    print(df)
    """ 
       hoge
    0     1
    1     2
    2     0
    """ 
    
[/code]


CC BY-SA 4.0
2020-08-18T05:04:04.723
69648
2020-08-18T05:04:04.723
9820
69646
answer