web-dev-qa-db-ja.com

float pandas列に整数のみが含まれているかどうかを確認する方法は?

データフレームがあります

df = pd.DataFrame(data=np.arange(10),columns=['v']).astype(float)

vの数字が整数であることを確認する方法は?丸め/切り捨て/浮動小数点表現のエラーが非常に心配です

11
00__00__00

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
13
cs95

データフレーム内の複数のフロート列を確認する場合は、次を実行できます。

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)
3
mgoldwasser