在数据帧上使用pandas apply()函数来创建新的数据帧

时间:2016-01-27 15:40:31

标签: python function pandas dataframe 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

我真的不明白为什么它不起作用。我之前做过类似的事情,但似乎有一些不同之处。任何人都可以解释这里有什么问题吗?

******************* EDIT *************************** **

函数中的

Anno是要运行函数的数据帧。它包含一个字符串,例如a,b,c,ad,c

1 个答案:

答案 0 :(得分:0)

DataFrame.apply采用函数,它适用于DataFrame的所有行/列。发生该错误是因为您的函数返回了一个DataFrame,然后您将其传递给apply

为什么在新创建的空数据框上使用.fillna(0)

这不会有用吗? Newdf = intI()