It depends on the type of noise and type of signal. Show an example if you want a good answer. But, that said, in general you probably want to low-pass filter the signal. If I were you, I'd take a Fourier power spectrum to see if most of the noise is high frequency, and the signal I care about mostly in a lower range. If they overlap, oh well that's life. I would have to think more about things.
One low-pass filter that's good for noisy signal in many cases is the Savitzky-Golay filter. It is described in Numerical Recipes, and for Python there's a function in the Python Numpy Cookbook. It is merely a convolution with a small kernel. You pick the window size based on the width of the peaks or other features, wide enough to mush out the noise, but not wider than the features. It can be small, say five points, or bigger like dozens, a hundred maybe.
You also pick a polynomial order - usually I use 2 or 4. Order 2 is fine for when the window is small, < 10 points or it spans less than half a cycle or so (if your signal resembles a sine) while order 4 is better at matching distorted peak shapes, but likes to have around 9 or more points. But a lot depends on the shape and frequency of the noise.
As other say in the comments, finding derivatives probably isn't the best strategy, but if you want find derivatives anyway, the Savitzky-Golay filter can do that - simultaneously smoothing and reporting the derivative instead of the signal.