Your question doesn't contain enough detail to answer it. For example, you just just say you tried it and it didn't work. What exactly did you try? An FFT of your entire data set, or did you have to break it into chunks? If you broke it into chunks because it was a large set, there are many potential problems there and I can't begin to guess, but the correct procedure is complex. If you just did it in one go, did you pad your data? And so on.
That said, let me do my best to help you out with a few points:
it is usually a good idea to do this kind of filtering in the time or spacial domain, rather than the frequency domain. Why? Some of that is covered here: http://blog.bjornroche.com/2012/08/why-eq-is-done-in-time-domain.html
AnonSubmitter85 is not quite right in his comment when he says, "If you want to remove all frequencies above 3(Hz), then zeroing out the frequency bins that correspond to frequency values of 3(Hz) and higher will do that. That's just true by definition." What actually happens is a bit more complex: you guarantee that the signal at the frequency bins above 3Hz will be zero, but it says nothing about the values between the bins. In fact, a filter designed this way will have attenuation above 3Hz that fluctuates greatly depending on the exact frequency. This is known as filter ripple, and can be reduced in various ways, but not eliminated. Depending on how many bins and what your data looks like exactly, the effect of ripple may be little to no attenuation of high frequencies.
Time domain filters called IIR filters might "smear" the time response of your data, but it depends on the type and exactly what you are concerned about. If you are eliminating high frequencies to smooth out noise you are probably fine. Here is a blog post I wrote about basic audio filters that can guide you as well: http://blog.bjornroche.com/2012/08/basic-audio-eqs.html That post describes a class of IIR filters. If you are extremely concerned, you can filter your data twice: once regularly and then again with your data set reversed.
You start with a signal having frequencies in the interval $[0,f]$. You take the FFT and get a spectrum with frequencies in $[-f/2,f/2]$. Then you apply the inverse FFT and recover the signal with frequencies in the interval $[0,f]$. Why do you think half the information vanishes in the middle step?
You might ask, how can signal components varying as fast as $f$ be represented in frequencies from $[-f/2, f/2]$? The answer is the wagon wheel effect and aliasing: all the spectrum originally in the interval $[f/2,f]$ is aliased into the $[-f/2,0]$ components. Then the inverse transform recovers the aliases back to their original frequencies.
This is not, however, magic. Time-domain frequencies in the interval $[f, 2f]$ also alias into the spectral interval $[-f/2,f/2]$ and your inverse transform will reconstruct them as if they were in the interval $[0,f]$. But it is exceptionally important to realize -- the discrete-time samples for aliased frequencies are the same. There is nothing in the time domain signal that distinguishes aliased frequencies. So the infinite family of aliases are all sent to one spectral bin and then reconstructed as if they had the smaller (positive) frequency (although the reconstructed sample values are the same as if the frequency was correctly recovered).
To convince yourself of some of this, actually sample signals of sinusoids having frequencies $-f/2$, $3f/2$, and $5f/2$. Then look at other sequences of aliases to firmly convince yourself that the sampled signals are identical. So there is no way for the inverse transform to know which member of an alias family to reconstruct -- and it doesn't have to. In the sample, there is no difference among the aliased frequencies.
So what is this all about? Suppose the original source was actually a pair of sinusoids at aliased frequencies. Apply the FFT and the inverse FFT and the result is at the lowest positive alias of both -- it is no longer a sum of two sinusoids, it's just one.
Best Answer
The answer is in the first post you linked to:
So apparently you confused the middle half of the elements as stored in memory with the middle half of the frequencies.