Python Pandas - 将数据附加到特定的行和列

时间:2015-07-10 08:15:12

标签: python pandas

搜索后,我不认为这是重复,但如果是,请告诉我。

我目前有一个包含许多行和变量的数据框。我想创建一个单行的单独数据框,它是每个变量的平均值。我这样做是为了让我可以轻松地在图表中绘制它。我不确定为什么我的语法不起作用。

这是针对一个特定变量的。如果我可以使用它,那么我可以通过循环将它扩展到所有列。

avg = pd.DataFrame(columns=original.columns.values)
avg['max_yds'].loc[0] = original['max_yds'].mean(axis=0)

在我看来,第一行创建了一个名为“avg”的数据框,它是空的并且包含原始的所有列。这似乎按预期工作。对于第二行,我希望它在'avg'中设置变量'max_yds'的第一行,并将其设置为原始变量'max_yds'的平均值。相反,我得到:Empty DataFrame

谢谢!

2 个答案:

答案 0 :(得分:1)

尝试

avg.set_value(0, 'max_yds', original['max_yds'].mean(axis=0))

如果要计算所有列的平均值,为什么不使用

avg = avg.append(original.mean(axis=0), ignore_index=True)

修改

原始解决方案的问题在于您使用了一种" chained indexing",这很糟糕。

您在每列中为Series添加值,但DataFrame的索引仍为空。

实际上,如果你添加

avg['max_yds'] = avg['max_yds']

avg['max_yds'].loc[0] = original['max_yds'].mean(axis=0)

,您的代码也可以正常运行。

或者您可以在开头指定索引,这也可以解决您的问题。

avg = pd.DataFrame(columns=original.columns.values, index=[0])

但是,不建议这样做。

答案 1 :(得分:1)

您也可以使用loc:

avg.loc[0, 'max_yds'] = original.loc[:, 'max_yds'].mean()

或者,您可以使用pandas.DataFrame.describe方法轻松检索统计信息。

所以,如果你想要一个具有所有列平均值的系列:

avg = original.describe().loc['mean']

如果您需要预期的输出数据帧:

avg = pd.DataFrame(index = [0], original.describe().loc['mean']).transpose()