I’ve read an Excel file into python using:
import pandas as pd
import numpy as np
water_consumption = pd.read_csv('Self_Data.csv')
and I’m trying to square the columns using:
exponent = 2 water_consumption['x2'] = np.power(water_consumption['Consumption_(HCF)'], exponent) water_consumption['y2'] = np.power(water_consumption['Water&Sewer_Charges'], exponent)
I keep getting the error:
TypeError: unsupported operand type(s) for ** or pow(): 'str' and 'int'
I’m fairly new to python. Is there any way to easily fix this?
Advertisement
Answer
Never use apply-lambda for straightforward mathematical operations it is orders of magnitude slower than using direct operations.
The problem that click004 is having is that columns are in str format.
They should be converted first to a numeric, typically with .convert_dtypes(): https://pandas.pydata.org/docs/reference/api/pandas.DataFrame.convert_dtypes.html
Pandas is quite good at understanding the type of column, the fact that it has been detected as str means that probably some of the values are not directly numbers, but may have units or something else.