

csvで読み込んだデータがobject型として読み込まれてしまい、int型への変換を実施したところ添付のようなエラーでつまずいてしまっております。  
色々やり方は調べたのですがどうしても解決できないため、解決方法を教示いただけると幸いです。

おそらく空欄が影響してしまっているのでreplaceでnp.NaNにした上でastypeにてint型変換をかけたのですがうまくいっていない状況です。

csvファイル：  
<https://drive.google.com/file/d/1a0uwjrnOBXi0MIpmpeY6UpyeL4YVYIlL/view?usp=sharing>

実行コード

[code]

    main = pd.read_csv("サンプルデータ.csv")
    main.head()
    
    文字列型が入っている
    print(main['PS_01_B00004031'].dtype)
    #object
    
    NaN(Not a Number) にしたい
    main = main.replace(' ', np.nan)
    main
    
    数値型へ変換する
    main = main.astype('int', errors='ignore')
    main
    
    main.dtypes.value_counts()
    ##int32      967
    object     603
    float64     34
    dtype: int64
    
[/code]

結果  
objectが残ってしまっている


CC BY-SA 4.0
2021-10-17T03:06:11.430
83139
2023-07-12T06:09:31.170
2021-10-17T07:20:58.987
3060
47685
question
python pandas
object 型データから int 型への変換でエラーが発生する


コメントで紹介した記事のように、読み込み時に空白を削除して`Int64`に変換すればすべての列は整数`Int64`型になり、空欄は`pandas.NA`となって`<NA>`と表示されます。  
@metropolisさんがコメントしているように、`NaN`はnumpyのnp.nanで浮動小数点の`Not a
Number`なので、それが含まれるなら整数型にはなりません。  
[Nullable integer data type](https://pandas.pydata.org/pandas-
docs/stable/user_guide/integer_na.html)

> Changed in version 1.0.0: Now uses pandas.NA as the missing value rather
> than numpy.nan.
>
> In Working with missing data, we saw that pandas primarily uses NaN to
> represent missing data. Because NaN is a float, this forces an array of
> integers with any missing values to become floating point. In some cases,
> this may not matter much. But if your integer column is, say, an identifier,
> casting to float can be problematic. Some integers cannot even be
> represented as floating point numbers.

[pandas 1.2.0+ での pd.NA
の特徴](https://qiita.com/hkzm/items/52195729e9b00ae88789)  
[Pandas で欠損値を含む整数型を扱う](https://qiita.com/hoto17296/items/b6c90db4b9bcdb7b6d78)

こんな感じで読み込み時に1行で指定することができます。

[code]

    df = pd.read_csv('サンプルデータ.csv', skipinitialspace=True, dtype='Int64')
    
[/code]

リンク先に紹介されたサンプルデータを使った結果はこうなります。

[code]

    Python 3.9.7 (tags/v3.9.7:1016ef3, Aug 30 2021, 20:19:38) [MSC v.1929 64 bit (AMD64)] on win32
    Type "help", "copyright", "credits" or "license" for more information.
    >>> import pandas as pd
    >>> df = pd.read_csv('サンプルデータ.csv', skipinitialspace=True, dtype='Int64')
    >>> df
        SampleID  SEX_CD  AGE  MARRIAGE  CHILD_CD  CHILD_CD2  CHILD_AGE_1  ...  PS_01_B00004165  PI_02_B00004165  PS_02_B00004165  PI_01_B00004166  PS_01_B00004166  PI_02_B00004166  PS_02_B00004166
    0    1160001       1   48         1         2          5         <NA>  ...                5                5                5                5                4                5                4
    1    1160002       1   51         2         2       <NA>         <NA>  ...                4             <NA>             <NA>                5                4             <NA>             <NA>
    2    1160003       2   55         2         1          1           25  ...             <NA>                4                5             <NA>             <NA>                4                4
    3    1160005       1   39         2         1          2           14  ...                4                5                4                5                4                5                4
    4    1160006       1   56         2         1          2           26  ...                4                5                4                4                4                5                4
    5    1160009       1   59         2         1          2           31  ...                5                5                4                5                4                5                4
    6    1160010       2   57         2         1          2           31  ...                5                5                5                5                4                5                4
    7    1160014       1   48         2         1          1           22  ...                3                3                3                4                4                3                4
    8    1160015       1   53         2         1          3           15  ...                4                5                4                5                4                5                4
    9    1163964       1   34         2         2       <NA>         <NA>  ...                5                5                5                5                5                5                5
    10   1163965       2   22         1         2       <NA>         <NA>  ...             <NA>             <NA>             <NA>             <NA>             <NA>             <NA>             <NA>
    11   1163966       1   20         1         2          5         <NA>  ...                5                5                5                5                5                5                5
    12   1163969       1   49         2         1          1            9  ...                5                5                5                5                5                5                5
    13   1163970       2   37         2         1          1            4  ...                5                5                5                5                5                5                5
    14   1163972       1   39         2         2       <NA>         <NA>  ...                4                4                3                5                4                5                4
    15   1163974       1   30         2         2       <NA>         <NA>  ...                4                3                3                3                4                3                4
    16   1163975       1   58         1         2          5         <NA>  ...                4                5                4                5                4                5                4
    17   1163977       1   28         1         2       <NA>         <NA>  ...                5                3                5                3                4                3                4
    18   1163980       1   22         1         2       <NA>         <NA>  ...                4             <NA>             <NA>                3                4             <NA>             <NA>
    19   1163981       2   20         1         2          5         <NA>  ...                5                4                4                4                5                4                4
    20   1163983       2   31         1         2          5         <NA>  ...                5                4                5                5                4                4                4
    
    [21 rows x 1604 columns]
    >>> df.dtypes.value_counts()
    Int64    1604
    dtype: int64
    >>>
    
[/code]


CC BY-SA 4.0
2021-10-17T07:19:22.317
83144
2021-10-17T07:19:22.317
26370
83139
answer