データフレームがあります
df = pd.DataFrame(data=np.arange(10),columns=['v']).astype(float)
v
の数字が整数であることを確認する方法は?丸め/切り捨て/浮動小数点表現のエラーが非常に心配です
astype(int)
との比較列を一時的にint
に変換し、np.array_equal
でテストします。
np.array_equal(df.v, df.v.astype(int))
True
float.is_integer
このpython関数をapply
と組み合わせて使用できます:
df.v.apply(float.is_integer).all()
True
または、スペースの効率化のために、ジェネレーター内包表記でpythonのall
を使用します。
all(x.is_integer() for x in df.v)
True
データフレーム内の複数のフロート列を確認する場合は、次を実行できます。
col_should_be_int = df.select_dtypes(include=['float']).applymap(float.is_integer).all()
float_to_int_cols = col_should_be_int[col_should_be_int].index
df.loc[:, float_to_int_cols] = df.loc[:, float_to_int_cols].astype(int)
np.NaN
値がある場合、すべての整数を含むフロート列は選択されないことに注意してください。欠損値を持つフロート列を整数にキャストするには、欠損値を、たとえば中央値の代入で埋める/削除する必要があります。
float_cols = df.select_dtypes(include=['float'])
float_cols = float_cols.fillna(float_cols.median().round()) # median imputation
col_should_be_int = float_cols.applymap(float.is_integer).all()
float_to_int_cols = col_should_be_int[col_should_be_int].index
df.loc[:, float_to_int_cols] = float_cols[float_to_int_cols].astype(int)