【问题标题】:How to run function for multitude of arrays如何为多个数组运行函数
【发布时间】:2021-01-08 18:34:36
【问题描述】:

所以我需要分析存储在 excelsheet 中的信号(在我的情况下是来自表皮细胞的钙信号)的峰数和宽度。每列包含一个单元格的所有值(600 个值)

为了分析峰值,我将使用 scipy.signal.find_peaks()scipy.signal.peak_widths() 函数进行分析,我将各个列放入包含该列中所有 601 个值的一维 numpy 数组中。

我通过将所有单独的列(列在 Excelsheet 中命名为 A、B、C、D 等)保存到它们自己的数据框(df_A、df_B)中,然后将它们放入一个数组中来做到这一点:

import numpy as np
import pandas as pd 

df = pd.read_excel('test.xlsx')

df_A = df.loc[:,'A']
df_B = df.loc[:,'B']

arrA = np.array(df_A)
arrB = np.array(df_B)

为了计算峰数和宽度,我使用了以下几行:

from scipy.signal import find_peaks, peak_widths

peaks_A, _ = find_peaks(x,height=7000, prominence= 1)

results_peakwidth_A = peak_widths(x, peaks, rel_height=0.5)

现在,由于我不仅要分析一个,而且要分析 > 100 个单元/信号,是否有一种简单的方法可以对所有单元/阵列执行此操作?这超出了我的能力范围,因此我很乐意提供任何帮助。

【问题讨论】:

    标签: python arrays excel numpy scipy


    【解决方案1】:

    建议如下。本质上,您首先选择所需的列(无论有多少)。然后您创建一个将接收一列的函数(无需将其转换为数组,除非scipy 不同意,在这种情况下,在process 函数的顶部添加column = column.values)。

    然后使用 apply,它将遍历数据框中的每一列并将其传递给您定义的函数。

    import pandas as pd 
    from scipy.signal import find_peaks, peak_widths
    
    df = pd.read_excel('test.xlsx')
    
    df = ... # select all columns from A-Z into a single dataframe with the columns required.
    # The shape here would b 
    # A  B   C 
    # 1  4 4.1
    # 2  3 4.0
    #  ...
    
    # define the function you want to apply to each column 
    def process(column):
       peaks, _ = find_peaks(column,height=7000, prominence= 1)
       return peak_widths(column, peaks, rel_height=0.5)
    
    new_columns = df.apply(process)
    

    由于我不确定实际输出应该是什么样子,您可能希望保留peaks_Awidth。在这种情况下,您可以稍微改变流程功能:

    def process(column):
       peaks, _ = find_peaks(column,height=7000, prominence= 1)
       width = peak_widths(column, peaks, rel_height=0.5)
       return pd.Series({"width": width, "peaks": peaks})
    
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-12-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-03-18
      • 1970-01-01
      相关资源
      最近更新 更多