Python 熊猫在原地的变化意味着什么

Python 熊猫在原地的变化意味着什么,python,pandas,dataframe,imputation,Python,Pandas,Dataframe,Imputation,我有一个数据框,在某些列中缺少值。我想用同一列中非缺失项的平均值来填充这些缺失值。很容易证明平均值在平均插补后不应改变。例如,假设有一列m缺少条目,而n未缺少条目的总和是s。平均插补步骤将用平均值s/n替换缺失条目。更换后的平均值应为 mean_after = ((s/n)*m + s)/(m+n) = s/n = mean_before_replacement 我认为这是一个合理的期望。然而,熊猫似乎违反了这一不变法则。下面是一个例子: >>> import pandas

我有一个数据框,在某些列中缺少值。我想用同一列中非缺失项的平均值来填充这些缺失值。很容易证明平均值在平均插补后不应改变。例如,假设有一列
m
缺少条目,而
n
未缺少条目的总和是
s
。平均插补步骤将用平均值
s/n
替换缺失条目。更换后的平均值应为

mean_after = ((s/n)*m + s)/(m+n) = s/n = mean_before_replacement
我认为这是一个合理的期望。然而,熊猫似乎违反了这一不变法则。下面是一个例子:

>>> import pandas as pd
>>> pd.__version__
'1.1.0'
>>> df = pd.read_csv("dftest.csv")
>>> df.describe()
                 a
count  1057.000000
mean      1.228950
std       0.420356
min       1.000000
25%       1.000000
50%       1.000000
75%       1.000000
max       2.000000
>>> df.notna().sum()
a    1057
dtype: int64
>>> df.isna().sum()
a    260
dtype: int64
>>> mean_before = df.a.mean()
>>> mean_before
1.2289498580889309
>>> df.fillna(dict(df.mean()), inplace=True)
>>> mean_after = df.a.mean()
>>> mean_after
1.228949858088931
>>> mean_before == mean_after
False
我在这里遗漏了什么吗?

我相信你看到了。我们通常被教导浮点运算只能精确到小数点后15位左右

如果我没弄错的话,你可以把所有的值乘以相同的倍数(如1000),做算术,然后除以相同的倍数以保持精度。另一个解决方案是四舍五入到第14位,以允许该断言为真


有关数学解释,请参见此。

好奇您的科学领域是什么,精度下降到10^-15needed@PaulH谢谢我面临的主要问题是数据帧在插补步骤之后被序列化。该数据随后在缩放步骤(0 1和std为1)后输入回归模型。我对优化算法的数值稳定性知之甚少,所以不能断言这种截断会引起问题。