Bandpass butterworth filter in python is not working
Did you finally solve this issue?

For what I can see in the code and the signals, two different reasons comes to my mind:

1) Try adding the parameter 'analog=False' to signal.butter. You should specify that the signal is not continuous but discrete:

b, a = signal.butter(n, [lower, higher], 'bandpass', analog=False)

b, a = sg.butter(5, [300.0/10000.0, 2300.0/10000.0],'bandpass', analog=True)

b,a
Out[17]: 
(array([0.00032, 0.     , 0.     , 0.     , 0.     , 0.     ]),
 array([1.00000000e+00, 6.47213595e-01, 2.43942719e-01, 5.97516391e-02,
        9.98927305e-03, 1.08294494e-03, 6.89259840e-05, 2.84477554e-06,
        8.01373787e-08, 1.46704689e-09, 1.56403135e-11]))

b, a = sg.butter(5, [300.0/10000.0, 2300.0/10000.0],'bandpass', analog=False)

b,a
Out[19]: 
(array([ 0.00128258,  0.        , -0.00641291,  0.        ,  0.01282581,
         0.        , -0.01282581,  0.        ,  0.00641291,  0.        ,
        -0.00128258]),
 array([  1.        ,  -7.69615728,  26.91430318, -56.40566369,
         78.54031013, -75.97473091,  51.72325998, -24.47255607,
          7.70127426,  -1.45546962,   0.12543062]))


2) The filter order is too big for python to be computed properly (Matlab may use different stability methods to achieve the final result or a different process to filter the signal)