【问题标题】:TypeError: 'DataFrame' object is not callable python functionTypeError:'DataFrame' 对象不是可调用的 python 函数
【发布时间】:2018-02-01 09:12:26
【问题描述】:

我有两个函数,一个从 csv 创建数据框,另一个用于操作该数据框。第一次通过lsc_age(import_data())函数传递原始数据没有问题。但是,我在第二次尝试时收到上述错误(TypeError: 'DataFrame' object is not callable)。关于如何解决问题的任何想法?

def import_data(csv,date1,date2):
    global data
    data = pd.read_csv(csv,header=1)
    data = data.iloc[:,[0,1,4,6,7,8,9,11]]
    data = data.dropna(how='all')
    data = data.rename(columns={"National: For Dates 9//1//"+date1+" - 8//31//"+date2:'event','Unnamed: 1':'time','Unnamed: 4':'points',\
              'Unnamed: 6':'name','Unnamed: 7':'age','Unnamed: 8':'lsc','Unnamed: 9':'club','Unnamed: 11':'date'})
    data = data.reset_index().drop('index',axis=1)
    data = data[data.time!='Time']
    data = data[data.points!='Power ']
    data = data[data['event']!="National: For Dates 9//1//"+date1+" - 8//31//"+date2]
    data = data[data['event']!='USA Swimming, Inc.']
    data = data.reset_index().drop('index',axis=1)
    for i in range(len(data)):
        if len(str(data['event'][i])) <= 3:
            data['event'][i] = data['event'][i-1]
        else:
            data['event'][i] = data['event'][i]
    data = data.dropna()
    age = []
    event = []
    gender = []
    for row in data.event:
        gender.append(row.split(' ')[0])
        if row[:9]=='Female 10':
            n = 4
            groups = row.split(' ')
            age.append(' '.join(groups[1:n]))
            event.append(' '.join(groups[n:]))
        elif row[:7]=='Male 10':
            n = 4
            groups = row.split(' ')
            age.append(' '.join(groups[1:n]))
            event.append(' '.join(groups[n:]))
        else:
            n = 2
            groups = row.split(' ')
            event.append(' '.join(groups[n:]))
            groups = row.split(' ')
            age.append(groups[1])
    data['age_group'] = age
    data['event_simp'] = event
    data['gender'] = gender
    data['year'] = date2
    return data

def lsc_age(data_two):
    global lsc, lsc_age, top, all_performers
    lsc = pd.DataFrame(data_two['event'].groupby(data_two['lsc']).count()).reset_index().sort_values(by='event',ascending=False)
    lsc_age = data_two.groupby(['year','age_group','lsc'])['event'].count().reset_index().sort_values(by=['age_group','event'],ascending=False)
    top = pd.concat([lsc_age[lsc_age.age_group=='10 & under'].head(),lsc_age[lsc_age.age_group=='11-12'].head(),\
                 lsc_age[lsc_age.age_group=='13-14'].head(),lsc_age[lsc_age.age_group=='15-16'].head(),\
                 lsc_age[lsc_age.age_group=='17-18'].head()],ignore_index=True)
    all_performers = pd.concat([lsc_age[lsc_age.age_group=='10 & under'],lsc_age[lsc_age.age_group=='11-12'],\
                            lsc_age[lsc_age.age_group=='13-14'],lsc_age[lsc_age.age_group=='15-16'],\
                            lsc_age[lsc_age.age_group=='17-18']],ignore_index=True)
    all_performers = all_performers.rename(columns={'event':'no. top 100'})
    all_performers['age_year_lsc'] = all_performers.age_group+' '+all_performers.year.astype(str)+' '+all_performers.lsc
    return all_performers

years = [i for i in range(2008,2018)]
for i in range(len(years)-1):
    lsc_age(import_data(str(years[i+1])+"national100.csv",\
    str(years[i]),str(years[i+1])))

【问题讨论】:

  • 你知道错误发生在哪一行吗?
  • 通过编辑问题在问题中包含错误的完整追溯
  • 附带说明,我会强烈不鼓励使用全局变量。要么将参数传递给函数,要么使用一个类。
  • 1) 不要命名完全相同的函数和数据对象。 2) 不要使对象成为全局对象并在同一函数中通过“return”返回它。这一切都会导致一些混乱。
  • @KriKors 如果其中一个答案有助于解决您的问题,请将您选择的答案标记为已接受。谢谢。

标签: python function pandas typeerror


【解决方案1】:

在第一次调用你的函数lsc_age()

lsc_age = data_two.groupby(['year','age_group','lsc'])['event'].count().reset_index().sort_values(by=['age_group','event'],ascending=False)

您正在使用数据框覆盖您的函数对象。发生这种情况是因为您使用

从全局命名空间导入了函数对象
global lsc, lsc_age, top, all_performers

Python 中的函数是对象。请查看有关此here 的更多信息。

要解决您的问题,请尽量避免全局导入。它们似乎没有必要。尝试通过函数的参数传递您的数据。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-08-23
    • 2017-06-17
    • 1970-01-01
    • 1970-01-01
    • 2014-02-05
    • 1970-01-01
    • 2019-08-09
    • 2013-05-05
    相关资源
    最近更新 更多