Я прочитал файл Excel в python, используя:
import pandas as pd
import numpy as np
water_consumption = pd.read_csv('Self_Data.csv')
и я пытаюсь возвести столбцы в квадрат, используя:
exponent = 2
water_consumption['x2'] = np.power(water_consumption['Consumption_(HCF)'], exponent)
water_consumption['y2'] = np.power(water_consumption['Water&Sewer_Charges'], exponent)
Я продолжаю получать ошибку:
TypeError: unsupported operand type(s) for ** or pow(): 'str' and 'int'
Я довольно новичок в питоне. Есть ли способ легко исправить это?
это привело меня на правильный путь. спасибо @bazinga012






Вы можете использовать lambda function следующим образом:
Но это работает, если тип данных столбца не является типом объекта.
за этот чек type(water_consumption['x2'])
вы попробуйте:
water_consumption['x2']=water_consumption['x2'].apply(lambda x:x**2)
>>> import pandas as pd
>>> water_consumption = {"x2":[1,2,3,4],"y2":[5,6,7,8]}
>>> water_consumption=pd.DataFrame(water_consumption)
>>> water_consumption
x2 y2
0 1 5
1 2 6
2 3 7
3 4 8
>>> water_consumption['x2']=water_consumption['x2'].apply(lambda x:x**2)
>>> water_consumption
x2 y2
0 1 5
1 4 6
2 9 7
3 16 8
>>>
Никогда не используйте apply-lambda для простых математических операций. это на порядки медленнее, чем при использовании прямых операций.
Проблема, с которой сталкивается click004, заключается в том, что столбцы имеют формат str.
Сначала их следует преобразовать в числовое, обычно с помощью .convert_dtypes(): https://pandas.pydata.org/docs/reference/api/pandas.DataFrame.convert_dtypes.html.
Pandas довольно хорошо понимает тип столбца, тот факт, что он был обнаружен как str, означает, что, вероятно, некоторые из значений не являются непосредственно числами, но могут иметь единицы или что-то еще.
преобразовать water_consumption['Consumption_(HCF)'] в int(water_consumption['Consumment_(HCF)']) или float(water_consumption['Consumption_(HCF)']) в зависимости от требования.