The topic of zeroing frequency bins before IFFT has been discussed here : Why is it a bad idea to filter by zeroing out FFT bins? It was very helpful to understand why it is a bad idea.
What do you think about, instead of zeroing, multiplying by a window (in the frequency domain!) which is 0 at the centre and smoothly goes to 1 outside of a small interval ?
t = linspace(0, 1, 256, endpoint=False)
x = sin(2 * pi * 3 * t) + cos(2 * pi * 100 * t)
X = fft(x)
window = 1 - scipy.hamming(128)
X[64:192] *= window
y = ifft(X)
Then it would not be a "rectangular" zeroing, but a "smoothed zeroing" in the frequency domain. What do you think about such a filter ?