2016-01-27 40 views
0

我現在有一個問題困擾着我。我已經編寫了一個函數,該函數應該根據數據幀的行值創建一個新的數據框,並根據函數中的條件填充值。我的功能看起來是這樣的:在數據框上使用pandas apply()函數創建新的數據框

def intI(): 

    df_ = pd.DataFrame() 
    df_ = df_.fillna(0) 

    for index, row in Anno.iterrows(): 
     genes=row['AR_Genes'].split(',') 
     df=pd.DataFrame() 
     if 'intI1' in genes: 
      df['Year']=row['Year'] 
      df['Integrase']= 1 
      df_=df_.append(df) 
     elif 'intI2' in genes: 
      df['Year']=row['Year'] 
      df['Integrase']= 1 
      df_=df_.append(df) 
     else: 
      df['Year']=row['Year'] 
      df['Integrase']= 0 
      df_=df_.append(df) 

    return df_ 

當我這樣稱呼它Newdf=Anno['AR_Genes'].apply(intI()),我得到以下錯誤:

TypeError: 'DataFrame' object is not callable 

我真的不明白爲什麼這是行不通的。我之前做過類似的事情,但似乎有一點我不明白。任何人都可以解釋這裏有什麼問題嗎?

*******************編輯************************** ***

Anno函數中是函數應該運行的數據幀。它包含一個字符串,例如a,b,c,ad,c

回答

0

DataFrame.apply需要函數它適用於DataFrame的所有行/列。發生該錯誤的原因是您的函數返回一個DataFrame,然後您將該DataFrame傳遞給apply

爲什麼在新創建的空DataFrame上使用.fillna(0)

這不工作? Newdf = intI()

+0

啊,我明白這個問題。我試過你的解決方案,但它只返回一個空的數據框,列'year'和'integrase'... –

相關問題