2015-09-04 90 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) 
相關問題