You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用列表推导式过滤DataFrame列致转置,如何直接得到目标维度?

解决EMG数据滤波后DataFrame维度不符的问题

你当前代码中,将列表推导式生成的滤波结果以列表形式传入pd.DataFrame时,每个滤波后的列数组会被当作一行数据,最终得到(5,1000)的DataFrame。无需使用transpose(),可以通过以下两种方式直接生成预期的(1000,5)维度结果:

方法一:字典推导式构造DataFrame

通过字典推导式生成以列名为键、滤波后数组为值的字典,pd.DataFrame会自动按列组织数据,同时保留原列名:

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

test_array = pd.DataFrame(np.random.normal(0,2,size=(1000,6)),columns = ['time','RF','VM','TA','GM','BF'])
b,a = butter(4,[0.05,0.9],'bandpass',analog=False)
columns = ['RF','VM','TA','GM','BF']

filtered_df = pd.DataFrame({col: filtfilt(b,a,test_array[col]) for col in columns})

方法二:使用apply对列批量处理

利用pandas的apply方法直接对目标列执行滤波操作,返回结果即为维度正确的DataFrame:

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

test_array = pd.DataFrame(np.random.normal(0,2,size=(1000,6)),columns = ['time','RF','VM','TA','GM','BF'])
b,a = butter(4,[0.05,0.9],'bandpass',analog=False)
columns = ['RF','VM','TA','GM','BF']

filtered_df = test_array[columns].apply(lambda x: filtfilt(b,a,x))

这两种方法都能直接生成(1000,5)的DataFrame,避免了额外的转置操作,同时保留原数据的列名结构,便于后续分析处理。

内容的提问来源于stack exchange,提问作者nacoker

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.01 20:00:16