Not sure whether it has a more convenient way to do that, followings are what I'm using:
Get the index of those have numbers but not nan
In [134]: s = d.dropna().index.to_series()
In [135]: s
Out[135]:
0 0
1 1
2 2
3 3
7 7
8 8
10 10
dtype: int64
Get start and end by
In [136]: start = s[s.diff(1) != 1].reset_index(drop=True)
In [137]: end = s[s.diff(-1) != -1].reset_index(drop=True)
Then you can construct what you want by
In [138]: pd.DataFrame({'start': start, 'end': end}, columns=['start', 'end'])
Out[138]:
start end
0 0 3
1 7 8
2 10 10
[3 rows x 2 columns]