#python #pandas #python-3.7
#python #pandas #python-3.7
Вопрос:
Видел пару ответов на общий вопрос, и я использовал некоторые из предложенных решений, но все равно застрял.
У меня есть следующий код:
name = ['Sepal-length', 'Sepal-width', 'Petal-length', 'Petal-width', 'Class']
iris_ds = pd.read_csv(url, names=name)
cols=iris_ds.columns.drop('Class')
iris_ds[cols]=iris_ds[cols].apply(pd.to_numeric, errors='coerce')
.......
iris_ds['Sepal-area'] = iris_ds.eval('Sepal-width' * 'Sepal-length')
print(iris_ds.head(20))
Однако, когда я запускаю скрипт для второго раздела, я получаю следующее:
Трассировка (последний последний вызов): файл «Iris_Data_set1.py «, строка 67, в iris_ds[‘Площадь лепестка’] = iris_ds.eval(‘Ширина лепестка’ * ‘Длина лепестка’) Ошибка типа: не удается умножить последовательность на не-int типа ‘str’
Типы данных следующие:
Разделительная длина float64
Sepal-width float64
Float64 с длиной лепестка
Float64 с шириной лепестка
Объект класса
dtype: объект
Любые предложения о том, как решить эту проблему, чтобы я мог выполнить умножение?
Ответ №1:
Есть ли какая-либо причина, по которой вы не можете просто сделать:
iris_ds['Sepal-area'] = iris_ds.Sepal-width * iris_ds.Sepal-length
Я думаю, что может быть 2 проблемы. Вероятно, вам не следует использовать Sepal-length
в качестве имени столбца, а вместо этого следует использовать Sepal_length
(и применить это к другим вашим переменным), давая ответ:
iris_ds['Sepal_area'] = iris_ds.Sepal_width * iris_ds.Sepal_length
Комментарии:
1. @Clauric просто для справки на будущее, в общем, это плохая идея называть переменные с a
-
в них, потому что python интерпретирует его как математический символ для вычитания, а не как часть имени переменной. Рекомендуется использовать_
вместо этого. python.org/dev/peps/pep-0008 /…