Как применить фильтр нижних частот 5 Гц к кадру данных pandas?

У меня есть pandas.DataFrame, проиндексированный по времени, как показано ниже. Другой столбец содержит данные, записанные с устройства, измеряющего ток. Я хочу отфильтровать второй столбец фильтром нижних частот с частотой 5 Гц, чтобы устранить высокочастотный шум. Я хочу вернуть фрейм данных, но я не возражаю, если он изменит тип для применения фильтра (массив numpy и т. д.).

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

Я отображаю эти данные по df.plot(legend=True, use_index=False, color='red'), но вместо этого хотел бы отобразить отфильтрованные данные.

Я использую pandas 0.18.1, но могу изменить.

Я посетил https://oceanpython.org/2013/03/11/signal-filtering-butterworth-filter/ и многие другие источники подобных подходов.


person Andrew    schedule 20.02.2017    source источник
comment
Иногда во втором столбце может быть пустая ячейка. Если вы хотите использовать какие-либо функции обработки сигналов scipy, вам сначала нужно решить, как вы хотите поступать с этими отсутствующими значениями. (Процесс замены отсутствующих значений в статистике известен как импутация.)   -  person Warren Weckesser    schedule 20.02.2017
comment
Добро пожаловать в Stack Overflow! Вы можете сначала пройти экскурсию и узнать Как задать хороший вопрос и создать минимальный, полный и проверяемый пример. Так нам легче вам помочь. В частности, есть ли какие-либо образцы данных? что ты уже испробовал?   -  person Stephen Rauch    schedule 21.02.2017
comment
Я посетил oceanpython.org/2013/03/11 /signal-filtering-butterworth-filter и многие другие источники подобных подходов. И...? Что вы пробовали? Покажите нам код. Это сработало? Если нет, объясните, что произошло. Вы получили ошибку? Если да, включите в вопрос полное сообщение об ошибке. Это дало неожиданный результат? Если да, покажите, что вы получили, и объясните, чего вы ожидали.   -  person Warren Weckesser    schedule 21.02.2017
comment
Вот еще один вопрос и ответ по Stackoverflow, который может оказаться полезным: фильтр в методах и единицах понимания scipy"> stackoverflow.com/questions/25191620/   -  person Warren Weckesser    schedule 21.02.2017


Ответы (1)


Возможно, я слишком упрощаю это, но вы создаете простое условие, создаете новый фрейм данных с фильтром, а затем создаете свой график из нового фрейма данных. В основном просто уменьшая фрейм данных только до записей, которые соответствуют условию. Я признаю, что не знаю точного числа для высокой частоты, но давайте предположим, что имя вашего второго столбца — «Частота».

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