如何使用熊猫从循环中将行追加到数据框?

时间:2019-05-16 18:07:11

标签: python pandas

我正在运行一个循环,该循环将值附加到循环外部的空数据帧中。但是,完成此操作后,数据帧将保持为空。我不确定发生了什么。目的是找到导致残差平方和最低的幂值。

下面的示例代码:

import tweedie

power_list = np.arange(1.3, 2, .01)
mean = 353.77
std = 17298.24
size = 860310
x = tweedie.tweedie(mu = mean, p = 1.5, phi = 50).rvs(len(x))
variance = 299228898.89

sum_ssr_df = pd.DataFrame(columns = ['power', 'dispersion', 'ssr'])

for i in power_list:

    power = i

    phi = variance/(mean**power)

    tvs = tweedie.tweedie(mu = mean, p = power, phi = phi).rvs(len(x))

    sort_tvs = np.sort(tvs)

    df = pd.DataFrame([x, sort_tvs]).transpose()
    df.columns = ['actual', 'random']
    df['residual'] = df['actual'] - df['random']
    ssr = df['residual']**2
    sum_ssr = np.sum(ssr)
    df_i = pd.DataFrame([i, phi, sum_ssr])
    df_i = df_i.transpose()
    df_i.columns = ['power', 'dispersion', 'ssr']
    sum_ssr_df.append(df_i)    

sum_ssr_df[sum_ssr_df['ssr'] == sum_ssr_df['ssr'].min()]

我到底在做什么错?

1 个答案:

答案 0 :(得分:0)

此代码的效率不如ALollz所指出的那样。当您追加内容时,它基本上会在内存中创建一个新的数据帧(我在这里简化了)。

您的代码中的错误是:

 sum_ssr_df.append(df_i)

应为:

 sum_ssr_df = sum_ssr_df.append(df_i)