pythonpandasnumpyfilterlowpass-filter

How to apply a low-pass filter of 5Hz to a pandas dataframe?


I have a pandas.DataFrame indexed by time, as seen below. The other column contains data recorded from a device measuring current. I want to filter to the second column by a low pass filter with a frequency of 5Hz to eliminate high frequency noise. I want to return a dataframe, but I do not mind if it changes type for the application of the filter (numpy array, etc.).

In [18]: print df.head()
Time
1.48104E+12    1.1185
1.48104E+12    0.8168
1.48104E+12    0.8168
1.48104E+12    0.8168
1.48104E+12    0.8168

I am graphing this data by df.plot(legend=True, use_index=False, color='red') but would like to graph the filtered data instead.

I am using pandas 0.18.1 but I can change.

I have visited https://oceanpython.org/2013/03/11/signal-filtering-butterworth-filter/ and many other sources of similar approaches.


Solution

  • Perhaps I am over-simplifying this but you create a simple condition, create a new dataframe with the filter, and then create your graph from the new dataframe. Basically just reducing the dataframe to only the records that meet the condition. I admit I do not know what the exact number is for high frequency, but let's assume your second column name is "Frequency"

    condition = df["Frequency"] < 1.0
    low_pass_df = df[condition]
    low_pass_df.plot(legend=True, use_index=False, color='red')