I\'m designing a bandpass filter in scipy following the cookbook. However, if I decrecrease the filtering frequencies too much I end up with garbage at high order filters. What
This is a common problem in digital filters. High order filters with cutoff frequencies far below the nyquist frequency tend to have unstable coefficients due to the limited precision of floating point numbers. Last I checked (admittedly a couple of years ago) Matlab did a much better job of conserving precision than scipy, although it will still give problems with sufficiently extreme filters.
There are a couple of options if you can't use matlab. The first is to break your filter up into cascaded second order sections. Basically you compute your desired poles and zeros, break them up into complex conjugate pairs, and compute the transfer function for each pair.
The second option is to resample to a sample rate more similar to the filter frequency. For instance, in your second example your sample rate is 25 and your highest cutoff frequency is .4. You can use a low-pass anti-aliasing filter and then decimate by a factor of 10 to a sample rate of 2.5. With the lower sampling rate, your bandpass filter coefficients will be less sensitive to rounding errors. If you do this, you have to make sure the anti-aliasing filter doesn't have the same problem.