Leaving aside proper NaN management, you can do it as simply as t, p = scipy.stats.ttest_ind(df_a.dropna(axis=0), df_b.dropna(axis=0))
.
See demo:
>>> import pandas as pd
>>> import scipy.stats
>>> import numpy as np
>>> df_a = pd.read_clibpoard()
>>> df_b = df_a + np.random.randn(5, 7)
>>> df_c = df_a + np.random.randn(5, 7)
>>> _, p_b = scipy.stats.ttest_ind(df_a.dropna(axis=0), df_b.dropna(axis=0))
>>> _, p_c = scipy.stats.ttest_ind(df_a.dropna(axis=0), df_c.dropna(axis=0))
>>> pd.DataFrame([p_b, p_c], columns = df_a.columns, index = ['df_b', 'df_c'])
VSPD1_perc VSPD2_perc VSPD3_perc VSPD4_perc VSPD5_perc VSPD6_perc \
df_b 0.425286 0.987956 0.644236 0.552244 0.432640 0.624528
df_c 0.947182 0.911384 0.189283 0.828780 0.697709 0.166956
VSPD7_perc
df_b 0.546648
df_c 0.206950