Я пытаюсь объединить два массива numpy (один с плавающей запятой, другой int) по горизонтали и поместить его через pandas DataFrame.
Итак, я попробовал:
from sklearn.datasets import load_iris
iris = pd.DataFrame(np.concatenate((load_iris().data, np.array([load_iris().target]).T), axis=1),
columns=[load_iris().feature_names+['target']])
Но это автоматически преобразует столбец target
в столбец типа float
из исходного int
. Я попытался преобразовать его обратно в int
с помощью
iris.target = iris.target.astype(int)
, но это вызывает ошибку TypeError:
TypeError: only integer scalar arrays can be converted to a scalar index
Так что у меня есть несколько вопросов.
(i ) Что говорит эта ошибка?
(ii) Можно ли вообще изменить тип отдельного столбца? (Между прочим, iris = iris.astype(int)
отлично работает, но при этом каждый столбец преобразуется в столбец типа int
, чего я не хочу.)
(iii) Каков наиболее эффективный с точки зрения памяти способ делаю что хочу? Приведенный ниже код производит то, что я пытаюсь сделать:
iris = pd.concat([pd.DataFrame(load_iris().data, columns = load_iris().feature_names),
pd.DataFrame(load_iris().target, columns=['target'])], axis=1)
Но при этом возникают проблемы с созданием нескольких pandas DataFrames и их объединением. Есть ли лучший способ получить точно такой же результат?