sm.OLS(y, X).fit() needs a constant column for the intercept.
Goal
Fit shillings on units and print params.
import pandas as pd
import statsmodels.api as sm
df = pd.DataFrame({'units': [12, 9, 3, 7, 11], 'shillings': [126.0, 94.5, 31.5, 73.5, 115.5]})
fit = sm.OLS(df['shillings'], sm.add_constant(df['units'])).fit()
print(fit.params.round(3).to_dict())
print('rsquared', round(fit.rsquared, 3))import pandas as pd
import statsmodels.api as sm
y = pd.Series([2.0, 4, 5, 7])
X = sm.add_constant([1, 2, 3, 4])
print(sm.OLS(y, X).fit().bse.round(3).to_dict())import pandas as pd
import statsmodels.api as sm
fit = sm.OLS([1, 2, 3], sm.add_constant([0, 1, 2])).fit()
print(fit.resid.round(4).tolist())import pandas as pd
import statsmodels.api as sm
fit = sm.OLS([10, 20, 30], sm.add_constant([1, 2, 3])).fit()
print(round(fit.rsquared, 6))