Проблема в том, что data[1]
по-прежнему имеет тип dtype object
после замены ?
на NaN
.Однако вы можете просто привести его к плавающему типу одним из двух способов:
Первый - использовать pd.to_numeric
с errors='coerce'
, что приводит к непроанализируемым строкам NaN
:
data[1] = pd.to_numeric(data[1], errors='coerce')
Второй - использовать вашу стратегию replace
, а затем использовать astype(float)
:
data = data.replace('?', np.nan)
data[1] = data[1].astype(float)
Оба метода приведут к включению столбца 1
в качестве числового столбца:
numeric_columns = data.select_dtypes(include=[np.number]).columns
>>> numeric_columns
Int64Index([1, 2, 7, 10, 14], dtype='int64')