For a meaningful interpolation, you would first need to define a 2D inperpolation function (bilinear, bicubic).
For better resutls directly use the scipy implementations of the percent point function (i.e. the inverse cumulative distribution function).
from scipy.stats import t
alpha = 0.05 # significance level = 5%
df = 5 # degrees of freedom
v = t.ppf(1 - alpha/2, df)
print(f'v: {v}')
Result is v: 2.57058 so the result is the same as the 2.571 from your table.
This code reproduces your student_t list:
def calc_v(alpha,df):
v = t.ppf(1 - alpha/2, df) # t-critical value
return v
alphas = [ 0.5, 0.1, 0.05, 0.01]
student_t = [[00, 50, 90, 95, 99]]
for i in range(21):
df = i+1
student_t.append([df]+[calc_v(alpha,df) for alpha in alphas])
for df in [30,40,50,60,61]:
student_t.append([df]+[calc_v(alpha,df) for alpha in alphas])
As said above, the inverse of the ppf is the cdf. It can be calculated like this:
P = 1 - 2*(1 - t.cdf(2.571,df = 5))
Which gives P = 0.950025.
Standard Normal
For standard normal distribution the ppf is also implemented in scipy:
from scipy.stats import norm norm.ppf(q, loc=0, scale=1)