【发布时间】:2013-11-09 04:20:36
【问题描述】:
我正在尝试使用 Dataframes 而不是 numpy 数组来重新编写用于信号处理的大部分分析代码。但是,我很难弄清楚如何将数据帧的整个矩阵作为一个整体传递给函数。
例如,如果我正在计算共同的平均参考信号,我有类似的东西:
avg = signal.mean(axis=1)
CAR = signal - avg
我想做的是将一个 pandas 数组传递给这个函数,并让它返回一个以 CAR 作为值的数据框。我想这样做,而不仅仅是返回一个数组,然后将其重新转换回数据帧。
听起来,当您使用 df.apply() 时,它会按行或按列进行,并且不会放入整个矩阵。我可以更改 CAR 的代码来完成这项工作,但它似乎会减慢它的速度,而不是仅仅使用 numpy 的代码一次完成所有工作。它可能不会对计算平均值产生太大影响,但我预见这将是未来可能需要更长时间的其他函数的问题。
谁能指出我正确的方向?
编辑:澄清一下,我这样做不仅仅是为了减去平均值,这只是一个简单的例子。一个更现实的例子是沿轴 0 线性过滤数组。我想使用 scipy.signal filtfilt 函数来过滤我的数组。如果我可以只传递一个 tpts x 壮举矩阵,这很容易,但现在看来,唯一的方法是使用“应用”逐列
【问题讨论】:
-
为什么不直接传递 DataFrame 本身呢?它是整个矩阵,你可以在上面使用
mean之类的方法就好了。 -
我试过这样做,但在某些函数上,它返回一个数组,而不是数据框。例如,我试图用线性滤波器做同样的事情,但 scipy 中的信号处理函数似乎期望(并反过来返回)数组..
-
我添加了一个可能对您有用的答案。不确定您的评论到底是什么意思。您无法更改其他函数 return 的对象类型,但我只是说在许多情况下,即使该函数需要一个 numpy,您也可以传递 in 一个 DataFrame数组。
-
您是否要从整个数据框中的每个项目中减去平均值?如果
signal是二维的,avg将返回一维帧,对吗?
标签: python numpy pandas dataframe