Pandas: не удается умножить последовательность на не-int типа ‘str’

#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 /…