🙄

PandasのDataFrameに対してastypeを使用した型変換をする場合の落とし穴

2023/11/11に公開

DataFrameの型変換ですごく時間をかけてしまったので備考録として。

dataframeのfloat型列をint型に変換したかった。
列名が固定ではないため、列番号を指定して変換しようと試みたがうまくいかなかった。

以下単純化したイメージ。

import pandas as pd

data = {
    "column1":[1.1,2.2,3.3],
    "column2":[4.4,5.5,6.6]
    }
df = pd.DataFrame(data)

#ilocで列を指定
df_iloc = df.copy()
df_iloc.iloc[:,1] = df.iloc[:,1].astype(int)
print(df_iloc)

##出力

column1 column2
0 1.1 4.0
1 2.2 5.0
2 3.3 6.0

小数1桁目が表示されてしまう。

彷徨い続けて最後に行き着いたのは以下の用に列名を指定する法式。

df_column = df.copy()
column = df_column.columns
df_column[column[1]] = df_column[column[1]].astype(int)
df_column

##出力

column1 column2
0 1.1 4
1 2.2 5
2 3.3 6

dtype変換時にiloc,iatは想定通りの動作をしない?
他の原因を探りまわって非常に時間をかけてしまった。

それでは良い明日を〜。

確認環境
python 3.9.5
pandas 2.0.1

Discussion