2017-08-23 1 views
1

Ich habe zwei Funktionen, eine, die einen Datenrahmen von einem CSV erstellt und einen anderen, der diesen Datenrahmen manipuliert. Es gibt kein Problem beim ersten Mal, wenn ich die Rohdaten über die lsc_age(import_data()) Funktionen übergebe. Jedoch bekomme ich den oben genannten Fehler (TypeError: 'DataFrame' object is not callable) bei zweiten + Versuchen. Irgendwelche Ideen zur Lösung des Problems?TypeError: 'DataFrame' -Objekt ist nicht aufrufbar Python-Funktion

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]))) 
+0

Wissen Sie, in welcher Zeile der Fehler auftritt? – LondonRob

+0

enthalten die vollständige Rückverfolgung des Fehlers in der Frage durch Bearbeiten der Frage –

+4

Als eine Randnotiz, würde ich * stark * die Verwendung von Globals abschrecken. Übergeben Sie entweder die Argumente an die Funktion oder verwenden Sie eine Klasse. – Alexander

Antwort

6

Beim ersten Aufruf Ihrer Funktion lsc_age() in Zeile

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

Sie Ihre Funktion Objekt mit einem Datenrahmen überschreiben. Dies geschieht, seit Sie das Funktionsobjekt aus dem globalen Namensraum mit Objekten importiert haben. Bitte beachten Sie weitere Informationen hierzu here.

Um Ihr Problem zu lösen, versuchen Sie, die globalen Importe zu vermeiden. Sie scheinen nicht notwendig zu sein. Versuchen Sie, Ihre Daten durch die Argumente der Funktion zu übertragen.

Verwandte Themen