# Searching the student-t distribution table for values using python

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)
```