【问题标题】:Using pandas apply() function on a dataframe to create a new dataframe在数据帧上使用 pandas apply() 函数来创建新的数据帧
【发布时间】:2016-01-27 15:40:30
【问题描述】:

我有一个问题困扰了我一段时间。我编写了一个函数,它应该根据数据框的行值创建一个新的数据框,其中填充了基于函数中条件的值。我的函数如下所示:

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

【问题讨论】:

    标签: python function pandas dataframe apply


    【解决方案1】:

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

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

    这行不通吗? Newdf = intI()

    【讨论】:

    • 啊,我明白了这个问题。我试过你的解决方案,但它只返回一个空数据框,其中包含“年份”和“整合”列...
    猜你喜欢
    • 2019-11-23
    • 1970-01-01
    • 2023-03-06
    • 2020-09-20
    • 2017-12-15
    • 2021-04-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多