私はValueError:float NaNを整数に変換できませんを取得します:
df = pandas.read_csv('zoom11.csv')
df[['x']] = df[['x']].astype(int)
更新:コメント/回答のヒントを使用して、これでデータをクリーンにしました:
# x contained NaN
df = df[~df['x'].isnull()]
# Y contained some other garbage, so null check was not enough
df = df[df['y'].str.isnumeric()]
# final conversion now worked
df[['x']] = df[['x']].astype(int)
df[['y']] = df[['y']].astype(int)
NaN
値を識別するには、 boolean indexing
を使用します。
print(df[df['x'].isnull()])
次に、数値以外の値をすべて削除するには、parameetr to_numeric
で errors='coerce'
を使用します。非数値をNaN
sに置き換えます。
df['x'] = pd.to_numeric(df['x'], errors='coerce')
また、列NaN
のx
sを持つすべての行を削除するには、 dropna
を使用します。
df = df.dropna(subset=['x'])
最後の値をint
sに変換:
df['x'] = df['x'].astype(int)
私はこれが回答されていることを知っていますが、将来誰にでも代替ソリューションを提供したいと考えました:
.loc
を使用して、notnull()
の値のみでデータフレームをサブセット化し、'x'
列のみをサブセット化できます。同じベクトルを取り、apply(int)
します。
列xがfloatの場合:
df.loc[df['x'].notnull(), 'x'] = df.loc[df['x'].notnull(), 'x'].apply(int)
ValueError:float NaNを整数に変換できません
V0.24から、実際にできます。 Pandasは Nullable Integer Data Types を導入します。これにより、整数をNaNと共存させることができます。
データが欠落している一連の浮動小数点数を考えると、
s = pd.Series([1.0, 2.0, np.nan, 4.0])
s
0 1.0
1 2.0
2 NaN
3 4.0
dtype: float64
s.dtype
# dtype('float64')
を使用して、null可能なint型に変換できます(Int16
、Int32
、またはInt64
のいずれかを選択)。
s2 = s.astype('Int32') # note the 'I' is uppercase
s2
0 1
1 2
2 NaN
3 4
dtype: Int32
s2.dtype
# Int32Dtype()
キャストを行うには、列に整数が必要です。それ以外はTypeErrorを発生させます:
s = pd.Series([1.1, 2.0, np.nan, 4.0])
s.astype('Int32')
# TypeError: cannot safely cast non-equivalent float64 to int32
null値がある場合、数学的操作を行うときにこのエラーが発生し、データセットを変更できないようにするにはdf[~df['x'].isnull()]df[['x']].astype(int)
を使用して解決します。