我有一个问题困扰我一段时间了。我编写了一个函数,它应该根据数据帧的行值创建一个新的数据框,该数据框根据函数中的条件填充值。我的功能如下:
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
答案 0 :(得分:0)
DataFrame.apply
采用函数,它适用于DataFrame的所有行/列。发生该错误是因为您的函数返回了一个DataFrame,然后您将其传递给apply
。
为什么在新创建的空数据框上使用.fillna(0)
?
这不会有用吗? Newdf = intI()