应用scipy filter函数后保留行数(使用nan)

2024-09-28 19:10:52 发布

您现在位置:Python中文网/ 问答频道 /正文

给定数据帧:

   PT011
0 -0.160
1 -0.162
2    NaN
3 -0.164
4    NaN
5    NaN
6 -0.166
7 -0.167

在放下南斯之后…:

signal_PT011:
 0   -0.160
1   -0.162
3   -0.164
6   -0.166
7   -0.167

我应用scipy.butter函数。我想保留pandas行号,因为过滤后的数据应该返回到新列中的原始pandas数组,并与“旧”行号对齐。当我应用scipy.butter函数时,我得到的列表没有行数:

Filtered signal PT011:
 [-3.86174478e-05 -1.91854502e-04 -4.94647878e-04 -9.42136953e-04
 -1.52929127e-03]

作为我预期的效果,数据帧的输出如下:

Expected output:
    PT011  signal_PT011_filtered
0 -0.160  -3.86174478e-05
1 -0.162  -1.91854502e-04
2    NaN              NaN
3 -0.164  -4.94647878e-04
4    NaN              NaN
5    NaN              NaN
6 -0.166  -9.42136953e-04
7 -0.167  -1.52929127e-03

这是我的完整代码:

import pandas as pd
import numpy as np
from scipy import signal
from scipy.signal import butter, lfilter

probes = {'PT011': [-0.16,-0.162,np.NaN,-0.164,np.NaN,np.NaN,-0.166,-0.167]}
df = pd.DataFrame(probes,columns= ['PT011'])
print(df) # Pandas dataframe

df=df.dropna() #Drop NaNs
signal_PT011=df.loc[:,'PT011']

print("Type of signal is:\n",type(signal_PT011)) # Pandas series
print("signal_PT011:\n",signal_PT011)

def butter_lowpass(cutoff, fs, order=2):
    nyq = 0.5 * fs
    normal_cutoff = cutoff / nyq
    b, a = butter(order, normal_cutoff, btype='low', analog=False)
    return b, a

def butter_lowpass_filter(data, cutoff, fs, order=2):
    b, a = butter_lowpass(cutoff, fs, order=order)
    y = lfilter(b, a, data)
    return y

order = 2
fs = 100.0       # sample rate, Hz 
cutoff = 0.5  # desired cutoff frequency of the filter, Hz

signal_PT011_filtered = butter_lowpass_filter(signal_PT011, cutoff, fs, order) # Execute function to filter data:
print("Filtered signal PT011:\n",signal_PT011_filtered)

我该怎么办


Tags: 数据importdfsignalnporderscipynan
1条回答
网友
1楼 · 发布于 2024-09-28 19:10:52

将筛选函数的索引输入作为提供的索引,生成一个新的序列:

input_to_filter = ...  # however it is you acquire it
output_of_filter = ...
new_output = pd.Series(output_of_filter, index=input_to_filter.index)

相关问题 更多 >