如何验证Pandas对大型DataFrame执行add()的结果正确性?
DataFrame列对应相加结果的验证方案
针对你用market_df.add(dividends_df, axis=1, fill_value=0)实现的列对应相加操作,以下是适用于228行×23列规模数据的验证方案:
1. 列映射关系验证
确保列对齐规则生效,fill_value参数正确处理缺失列:
- 检查总列数一致性:用
set(market_df.columns).union(set(dividends_df.columns))获取两个DataFrame的所有列集合,确认total_returns.columns与该集合完全匹配。 - 验证单来源列的结果:
- 选取仅存在于
market_df的列,执行assert (total_returns['目标列名'] == market_df['目标列名']).all(),确认该列值未被修改(因为另一DataFrame无此列,加0后不变)。 - 同理,选取仅存在于
dividends_df的列,验证total_returns对应列与原列值完全一致。
- 选取仅存在于
2. 核心对应列相加验证
验证共同列的逐值相加逻辑正确:
- 全列抽样验证:随机选取5-10个两个DataFrame都存在的列,对每个列执行:
确认自动相加结果与手动填充空值后相加的结果完全一致。assert (total_returns[col] == market_df[col].fillna(0) + dividends_df[col].fillna(0)).all() - 行抽样验证:随机抽取20-30行样本,逐行对比手动计算结果与
total_returns的对应行:import numpy as np sample_rows = np.random.choice(market_df.index, size=30, replace=False) for idx in sample_rows: manual_row_sum = market_df.loc[idx].fillna(0).add(dividends_df.loc[idx].fillna(0), fill_value=0) assert manual_row_sum.equals(total_returns.loc[idx])
3. 空值与特殊值边界验证
确保fill_value参数正确处理空值,极端值计算无误:
- 空值场景验证:找到
market_df或dividends_df中含NaN的位置,检查total_returns对应位置:- 若仅一侧为NaN,结果应等于非空值;
- 若两侧均为NaN,结果应为0。
- 极端值验证:选取各列的最大值、最小值、负数样本,手动计算相加结果,对比
total_returns对应位置的值是否一致。
4. 整体统计量校验
通过宏观统计量快速验证结果合理性:
- 总求和验证:计算三个DataFrame的全局总和,确认
total_returns.sum().sum()等于market_df.sum().sum() + dividends_df.sum().sum()(空值被fill_value=0替换,不影响总和)。 - 列级统计量对比:对共同列,用
np.isclose(total_returns[col].mean(), market_df[col].fillna(0).mean() + dividends_df[col].fillna(0).mean())验证均值的一致性(处理浮点精度问题)。
内容的提问来源于stack exchange,提问作者mahmoud988
相关产品推荐
相关产品推荐

