gpt4 book ai didi

python - 为什么 pandas 的 DataFrame 系列 mean() 失败,但 sum() 却没有,如何让它工作?

转载 作者:太空狗 更新时间:2023-10-30 01:48:41 25 4
gpt4 key购买 nike

在 Python Pandas 中可能有更聪明的方法来执行此操作,但以下示例应该有效,但不起作用:

import pandas as pd
import numpy as np

df1 = pd.DataFrame([[1, 0], [1, 2], [2, 0]], columns=['a', 'b'])
df2 = df1.copy()
df3 = df1.copy()

idx = pd.date_range("2010-01-01", freq='H', periods=3)
s = pd.Series([df1, df2, df3], index=idx)
# This causes an error
s.mean()

我不会发布整个回溯,但主要的错误信息很有趣:

TypeError: Could not convert    melt  T_s
0 6 12
1 0 6
2 6 10 to numeric

看起来数据框已成功求和,但没有除以序列的长度。

但是,我们可以对系列中的数据帧求和:

s.sum()

...返回:

      a     b
0 6 12
1 0 6
2 6 10

为什么 mean() 不能工作而 sum() 可以?这是错误还是缺少功能?这确实有效:

(df1 + df2 + df3)/3.0

...还有这个:

s.sum()/3.0
a b
0 2 4.000000
1 0 2.000000
2 2 3.333333

但这当然不理想。

最佳答案

您可以(如@unutbu 所建议的那样)使用分层索引,但是当您拥有三维数组时,您应该考虑使用“pandas Panel”。特别是当其中一个维度代表时间时,如本例所示。

Panel 经常被忽视,但它毕竟是 pandas 名称的来源。 (面板数据系统或类似的系统)。

数据与您的原始数据略有不同,因此没有两个维度具有相同的长度:

df1 = pd.DataFrame([[1, 0], [1, 2], [2, 0], [2, 3]], columns=['a', 'b'])
df2 = df1 + 1
df3 = df1 + 10

面板可以通过几种不同的方式创建,但其中一种来自字典。您可以使用索引和数据框创建字典:

s = pd.Panel(dict(zip(idx,[df1,df2,df3])))

您要寻找的平均值只是在正确的轴上操作(在本例中为 axis=0):

s.mean(axis=0)

Out[80]:
a b
0 4.666667 3.666667
1 4.666667 5.666667
2 5.666667 3.666667
3 5.666667 6.666667

根据您的数据,sum(axis=0) 返回预期结果。

编辑:好的,对于面板来说太晚了,因为分层索引方法已经“被接受”。我会说,如果已知数据是“参差不齐”且每个分组中的数字未知但不同,则该方法更可取。对于“square”数据,面板绝对是最佳选择,并且通过更多内置操作将显着加快速度。 Pandas 0.15 对多级索引有很多改进,但在现实世界的应用程序中仍然存在局限性和暗边缘情况。

关于python - 为什么 pandas 的 DataFrame 系列 mean() 失败,但 sum() 却没有,如何让它工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27709433/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com