2015-09-04 119 views
0

我有一个包含60列数据的数据框(列1 = I 1,列2 = S 1 ....列3 = I 2,列4 = S 2。 。)等等)...从pandas中的同一数据帧的列中绘制数据

我想创建一个函数,每次选择两列进行切片,绘图和查找切片的积分。我可以做两列,但我不知道如何实现一个函数来运行所有60列。到目前为止,我有以下几点:

df = pd.DataFrame.from_csv(filepath, index_col =None) 
df_slice =df.iloc[23500:25053] 


R = df_slice['I 1'] 
I = df_slice['S 1'] 
rcParams['figure.figsize']= 10,5 
plt.plot(R, I) 
plt.xlabel('cm-1') 
plt.ylabel('Hz') 

#integration of peak 

area = trapz(R) 
print area 

enter image description here

的功能:

def integrate_peak(filepath): 
    df = pd.DataFrame.from_csv(filepath, index_col =None) 
    for row in df: 
     ..........slice 
     ..........overlay plots 
     ..........get integral for each plot curve 

输出:在一个单独的数据帧

任何帮助将

30个积分答案不胜感激。

编辑:

我已经试过这样:

def get_slice(): 
    df = pd.DataFrame.from_csv(filepath, index_col =None) 
    for i in range(1,31): 
     df_slice = df.iloc[23500:25053] 
     R = df_slice['I %i' %i] 
     I = df_slice['S %i' %i] 
     plt.plot(R,I) 
     area = trapz(R) 
     print area 

get_slice() 

这给我的30个地块的覆盖,但是给了我30个值整体(全部为相同数量)

+0

是不可能对所有列进行简单循环,例如,使用'范围内的切片(1,31)'等等?要选择正确的列,您可以使用'df_slice ['I%i'%slice]'等等。 – Pilik

+0

将会很有趣,您将如何设置集成边界。此外,它看起来像下面有第二个高峰。你说明了吗? – Moritz

回答

0

例如:

def f(col1,col2): 
    print col1,col2 
    R = df[col1] 
    I = df[col2] 
    rcParams['figure.figsize']= 10,5 
    plt.plot(R, I) 
    plt.xlabel('cm-1') 
    plt.ylabel('Hz') 
    area = np.trapz(R) 
    print area 
    return col2 
reduce(lambda x,y:f(x,y),df) 
plt.show() 

用于处理(col1,col2)然后(col2,col3)等。

+0

我希望函数为我选择列并计算60列的切片(的数据)的积分而不是2.您基本上已经创建了一个函数,该函数执行我的代码的功能,但仅限于一组数据。 – Joey

+0

看看减少。这段代码会给你一个(列数)图的叠加,并且会打印相同数量的不同积分,是不是你想要的? – hellpanderrr

0

唉,我找到了解决办法。

def get_slice(): 
     area_list = [] 
     df = pd.DataFrame.from_csv(filepath, index_col =None) 
     Raman = df['I 1'] 
     Intensity = df['S 1'] 

     for i in range(1,31): 
      df_slice = df.iloc[23500:25053] 
      R = df_slice['I %i' %i] 
      I = df_slice['S %i' %i] 
      for i in R: 
       area = trapz(R, x = I) 
      area_list.append(area) 
     a = np.mean(area_list) 
相关问题