#python #pandas #dataframe #scipy #фурье
Есть DataFrame примерно такого содержания: Time Data 95114 1012.0 96078 1108.0 97033 1132.0 98015 1076.0 ... Состоит из 100 строк, где: Time - время измерения в микросекундах Data - измеряемое значение. Мне необходимо найти ДПФ этой зависимости. Все бы ничего, только частота измерения непостоянна. Она немного плывет со временем случайным образом. Т.е. мои потуги в духе: xf = fftfreq(len(df['Time']),1000) # 1000 взята как примерный период измерений i = xf > 0 yf = fft(df['Data']) Дают немного неожиданный результат. Я так понимаю, что дело в частоте. Как правильно ее искать? Интерполировать свой дискретный ряд и потом уже находить его ДПФ? В итоге мне нужно будет найти площадь между определенными частотами спектра.
Ответы
Ответ 1
Можно воспользоваться методом DataFrame.resample(), чтобы преобразовать DataFrame во временной ряд с единым интервалом (в качестве единого интервала возьмем средний интервал между замерами в микросекундах) и после этого интерполировать недостающие значения. Для этого надо конвертировать df.Time в datetime dtype и установить этот столбец в качестве индекса: In [62]: freq = int(df['Time'].diff().mean()) # средняя частота измерения в микросекундах In [63]: freq Out[63]: 967 In [64]: df = (df.set_index(pd.to_datetime(df.pop('Time'), unit='us')) .resample('{}U'.format(freq)) .mean() .interpolate()) In [65]: df Out[65]: Data Time 1970-01-01 00:00:00.094766 1012.0 1970-01-01 00:00:00.095733 1108.0 1970-01-01 00:00:00.096700 1132.0 1970-01-01 00:00:00.097667 1076.0 После этого можно попробовать воспользоваться преобразованиями Фурье.
Комментариев нет:
Отправить комментарий