Скрипт в Python / Pandas работает, но не работает, если поместить в сторону функции - PullRequest
0 голосов
/ 13 сентября 2018

У меня есть скрипт, который я запускаю, чтобы попытаться создать фрейм данных для суммирования некоторой статистики:

month = [may,june,july,august,sept]
month_str = [5,6,7,8,9]
avg_age = []
avg_use = []
avg_kwh = []
avg_coll = []
avg_cred = []
for i in month:
    avg_age.append(i[i['Age']!=0]['Age'].mean())
    avg_use.append(i[i['AverageBilledUsage']!=0]['AverageBilledUsage'].mean())
    avg_kwh.append(i[i['AverageKWH']!=0]['AverageKWH'].mean())
    avg_coll.append(i[i['Total Collected']!=0]['Total Collected'].mean())
    avg_cred.append(i[(i['credit_score']!=0) & (i['credit_score']!=99999)]['credit_score'].mean())
pd.DataFrame(data = [avg_age,avg_use,avg_kwh,avg_coll,avg_cred],columns = month_str,index = ['Age','Usage','kwh','collected','creditscore'])

Он возвращает именно то, что я хочу увидеть. Но когда я помещаю его в функцию, я получаю следующую ошибку:

AssertionError: 5 columns passed, passed data had 1 columns

Вот код внутри функции:

def get_nums():
    months = [may,june,july,august,sept]
    month_str = [5,6,7,8,9]
    avg_age = []
    avg_use = []
    avg_kwh = []
    avg_coll = []
    avg_cred = []
    for i in months:
        avg_age.append(i[i['Age']!=0]['Age'].mean())
        avg_use.append(i[i['AverageBilledUsage']!=0]['AverageBilledUsage'].mean())
        avg_kwh.append(i[i['AverageKWH']!=0]['AverageKWH'].mean())
        avg_coll.append(i[i['Total Collected']!=0]['Total Collected'].mean())
        avg_cred.append(i[(i['credit_score']!=0) & (i['credit_score']!=99999)]['credit_score'].mean())
        this_df = pd.DataFrame(data = [avg_age,avg_use,avg_kwh,avg_coll,avg_cred],columns = month_str,index = ['Age','Usage','kwh','collected','creditscore'])
    return this_df

Ответы [ 2 ]

0 голосов
/ 13 сентября 2018

Исходя из моего понимания, вам здесь не нужен цикл for

month = [may,june,july,august,sept]
month_str = [5,6,7,8,9]
df=pd.concat(month,keys=month_str)

df=df.mask(df==0|df==99999)

df.groupby(level=0).mean().T
0 голосов
/ 13 сентября 2018

У вас проблема с последней строкой цикла for в функции. this_df определяется в каждой итерации цикла.

Исправленный код приведен ниже.

def get_nums():
    months = [may,june,july,august,sept]
    month_str = [5,6,7,8,9]
    avg_age = []
    avg_use = []
    avg_kwh = []
    avg_coll = []
    avg_cred = []
    for i in months:
        avg_age.append(i[i['Age']!=0]['Age'].mean())
        avg_use.append(i[i['AverageBilledUsage']!=0]['AverageBilledUsage'].mean())
        avg_kwh.append(i[i['AverageKWH']!=0]['AverageKWH'].mean())
        avg_coll.append(i[i['Total Collected']!=0]['Total Collected'].mean())
        avg_cred.append(i[(i['credit_score']!=0) & (i['credit_score']!=99999)]['credit_score'].mean())
    this_df = pd.DataFrame(data = [avg_age,avg_use,avg_kwh,avg_coll,avg_cred],columns = month_str,index = ['Age','Usage','kwh','collected','creditscore'])
    return this_df
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...