【问题标题】:Vectorizing function on arrays in DataFrame column?DataFrame列中数组的矢量化函数?
【发布时间】:2019-05-15 17:38:50
【问题描述】:

我想对 Dataframe 列中的每个元素使用一个函数 (scipy.signal.savgol_filter)(该列的每个元素都是一个数组)。虽然循环似乎有点不必要,但我无法理解矢量化解决方案。

我尝试了明显的 .apply 方法以及仅使用列上的函数。两者都显示错误,例如“使用序列设置数组元素”。

使用列表而不是数组的示例代码(但结果相同):

import pandas as pd
from scipy import signal 
df = pd.DataFrame(data={'A': [[1,3,9], [7,2,3], [3,2,6,3], [2,3,4]]})
df['smooth'] = df.apply(signal.savgol_filter, args=(3, 0))

分别:

df['smooth'] = signal.savgol_filter(df['A'], 3, 0)

或者:

df['smooth'] = signal.savgol_filter(df['A'].values, 3, 0)

我认为这些都不起作用,因为整列都给了函数。 有没有办法同时在列中的所有元素(=数组)上使用该函数,还是我必须遍历每一行?

【问题讨论】:

    标签: python arrays pandas dataframe apply


    【解决方案1】:

    问题在于,当您尝试将其视为多维数组时,您的元素的形状不同。

    如果您只想将该函数应用于每一行,则需要明确选择该列:

    df['smooth'] = df['A'].apply(signal.savgol_filter, args=(3, 0))
    

    不过,这并不是真正的矢量化解决方案。

    编辑:

    值得补充的是,numpy 问题跟踪器上有关于此错误消息的歧义的讨论。

    herehere

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2022-01-14
      • 2023-03-20
      • 2020-04-06
      • 1970-01-01
      • 2021-02-07
      • 2014-03-31
      • 2014-09-05
      相关资源
      最近更新 更多