簡體   English   中英

python / pandas中的腳本有效,但放在函數旁邊時不起作用

[英]Script in python/pandas works but doesn't work when placed in side a function

我正在運行以下腳本來嘗試創建一個數據框以匯總一些統計信息:

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

函數中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

根據我的理解,這里不需要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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM