Python df.mean()和df[';列';].mean()结果的差异
我只运行以下三行:Python df.mean()和df[';列';].mean()结果的差异,python,pandas,mean,Python,Pandas,Mean,我只运行以下三行: df = pd.read_hdf('data.h5') print(df.mean()) print(df['derived_3'].mean()) 第一个打印列出了每列的所有单独方式,其中一个为 derived_3 -5.046012e-01 第二个print仅给出该列的平均值,并给出结果 -0.504715 尽管在使用科学符号和非科学符号方面存在差异,但这些值是不同的——为什么会这样 使用其他方法的示例 使用sum()执行相同操作将导致以下结果: d
df = pd.read_hdf('data.h5')
print(df.mean())
print(df['derived_3'].mean())
第一个打印
列出了每列的所有单独方式,其中一个为
derived_3 -5.046012e-01
第二个print
仅给出该列的平均值,并给出结果
-0.504715
尽管在使用科学符号和非科学符号方面存在差异,但这些值是不同的——为什么会这样
使用其他方法的示例 使用
sum()
执行相同操作将导致以下结果:
derived_3 -7.878262e+05
-788004.0
同样,结果略有不同,但count()
返回相同的结果:
derived_3 1561285
1561285
另外,df.head()
的结果:
pd.DataFrame
方法与pd.Series
方法
在df.mean()。返回的是一个pd.Series
,其中df.columns
是新的索引,每列的平均值是值。在最初的示例中,df
只有一列,因此结果是一个长度为1的系列,其中索引是该列的名称,值是该列的平均值
在df['derived_3'].mean()
,mean
是pd.Series.mean
,df['derived_3']
是pd.Series
。pd.Series.mean的结果将是一个标量
显示差异
显示的差异是因为df.mean
的结果是一个pd.Series
,浮点格式由pandas
控制。另一方面,df['derived_3'].mean()
是python原语,不受pandas控制
import numpy as np
import pandas as pd
标量
pd.系列
不同格式
减少
将这些不同的方法视为是否降低维度是有用的。或同义词,聚合或转换
- 减少一个
pd.DataFrame
将导致一个pd.Series
- 减少一个
pd.Series
会产生一个标量
降低成本的方法
平均值
sum
std
另外,在我的帖子中添加df.dtypes
。这是一个非常大的文件,据我所知,其中一些数字有大约20位小数位,这并没有显示在熊猫的结果中。这可能是造成问题的原因吗?也许,看看吧,我明白了。当你说“显示差异”时,你的意思是计算实际上在两个方面都是完全正确的,只是显示方式不同,或者如果我在执行计算时交换了我的两个示例,这是否会扭曲我的结果?它们完全相同3.14159265359
和pd.Series(3.14159265359)
中的值是相同的。@piRSquared关于这一点还有一个问题-我有这个操作df.ix[:,2:-1]=df.ix[:,2:-1]-df.ix[:,2:-1].mean()
,我希望将所有索引列规范化,使它们的平均值现在为0。执行此操作后,当我打印出平均值时,它们都显示为非常小的数字,但没有一个精确显示为0。我是否可以检查我的等式是否正确,值是否为零,或者我的等式是否错误,如果是,它们将显示为0?当你身处浮点世界时,没有精确的东西。这个很小的数字接近于零。您可以使用np.isclose
确定浮点数是否接近,是否在某个公差范围内。如果愿意,可以使用舍入
使其等于零。
import numpy as np
import pandas as pd
np.pi
3.141592653589793
pd.Series(np.pi)
0 3.141593
dtype: float64
with pd.option_context('display.float_format', '{:0.15f}'.format):
print(pd.Series(np.pi))
0 3.141592653589793
dtype: float64