🙄
PandasのDataFrameに対してastypeを使用した型変換をする場合の落とし穴
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