NaN を含む Pandas 列を dtype `int` に変換する 質問する

NaN を含む Pandas 列を dtype `int` に変換する 質問する

以下のように、.csv ファイルから Pandas データフレームにデータを読み取ります。列の 1 つ、つまり についてはid、列タイプを として指定したいと思いますint。問題は、idシリーズに欠損値または空の値があることです。

id.csv の読み取り中に列を整数に変換しようとすると、次の結果が表示されます。

df= pd.read_csv("data.csv", dtype={'id': int}) 
error: Integer column has NA values

あるいは、以下のように読み取った後に列の型を変換しようとしましたが、今度は次のようになります。

df= pd.read_csv("data.csv") 
df[['id']] = df[['id']].astype(int)
error: Cannot convert NA to integer

これにどう対処すればいいでしょうか?

ベストアンサー1

バージョン 0.24 以降では、pandas は欠損値を持つ整数 dtype を保持できるようになりました。

NULL 値許容整数データ型

Pandasは、欠損値を含む可能性のある整数データを次のように表現できます。arrays.IntegerArrayこれはパンダ内で実装された拡張型です。これは整数のデフォルトのdtypeではなく、推論されません。dtypeを明示的に渡す必要があります。array()またはSeries

arr = pd.array([1, 2, np.nan], dtype=pd.Int64Dtype())
pd.Series(arr)

0      1
1      2
2    NaN
dtype: Int64

列を null 許容整数に変換するには、次を使用します。

df['myCol'] = df['myCol'].astype('Int64')

おすすめ記事